From fe7e3dbc5a3701d79a60c838bbe02900d2f31b8b Mon Sep 17 00:00:00 2001 From: Expo on server Date: Thu, 16 May 2024 19:50:28 +0100 Subject: [PATCH] slippy trials --- map/slippy/index.html | 2 +- map/test/3rd-party/index.html | 203 +++++++ map/test/doc/errors/index.html | 197 +++++++ map/test/doc/faq.html | 398 +++++++++++++ map/test/doc/index.html | 91 +++ map/test/doc/quickstart.html | 165 ++++++ map/test/doc/tutorials/background.html | 105 ++++ map/test/doc/tutorials/concepts.html | 142 +++++ map/test/doc/tutorials/index.html | 88 +++ .../double-occurrence.jpg | Bin 0 -> 104113 bytes .../how-it-works.jpg | Bin 0 -> 129810 bytes .../iterative-triangulation.png | Bin 0 -> 13994 bytes .../doc/tutorials/raster-reprojection.html | 187 ++++++ map/test/download/index.html | 139 +++++ map/test/favicon.ico | Bin 0 -> 10205 bytes map/test/index.html | 204 +++++++ map/test/main.js | 3 + map/test/theme/img/logo-dark.svg | 23 + map/test/theme/img/logo-light.svg | 23 + map/test/theme/img/popup.png | Bin 0 -> 5269 bytes map/test/theme/img/tiled-layers.png | Bin 0 -> 6560 bytes map/test/theme/img/timeline.png | Bin 0 -> 2971 bytes map/test/theme/img/vector-layers.png | Bin 0 -> 5108 bytes map/test/theme/index.css | 50 ++ map/test/theme/ol.css | 350 ++++++++++++ map/test/theme/site.css | 531 ++++++++++++++++++ map/test2/apikey | 1 + map/test2/index.html | 12 + map/test2/main.js | 18 + map/test2/style.css | 14 + 30 files changed, 2945 insertions(+), 1 deletion(-) create mode 100644 map/test/3rd-party/index.html create mode 100644 map/test/doc/errors/index.html create mode 100644 map/test/doc/faq.html create mode 100644 map/test/doc/index.html create mode 100644 map/test/doc/quickstart.html create mode 100644 map/test/doc/tutorials/background.html create mode 100644 map/test/doc/tutorials/concepts.html create mode 100644 map/test/doc/tutorials/index.html create mode 100644 map/test/doc/tutorials/raster-reprojection-resources/double-occurrence.jpg create mode 100644 map/test/doc/tutorials/raster-reprojection-resources/how-it-works.jpg create mode 100644 map/test/doc/tutorials/raster-reprojection-resources/iterative-triangulation.png create mode 100644 map/test/doc/tutorials/raster-reprojection.html create mode 100644 map/test/download/index.html create mode 100644 map/test/favicon.ico create mode 100644 map/test/index.html create mode 100644 map/test/main.js create mode 100644 map/test/theme/img/logo-dark.svg create mode 100644 map/test/theme/img/logo-light.svg create mode 100644 map/test/theme/img/popup.png create mode 100644 map/test/theme/img/tiled-layers.png create mode 100644 map/test/theme/img/timeline.png create mode 100644 map/test/theme/img/vector-layers.png create mode 100644 map/test/theme/index.css create mode 100644 map/test/theme/ol.css create mode 100644 map/test/theme/site.css create mode 100644 map/test2/apikey create mode 100644 map/test2/index.html create mode 100644 map/test2/main.js create mode 100644 map/test2/style.css diff --git a/map/slippy/index.html b/map/slippy/index.html index f0c4aee30..1da0b073a 100644 --- a/map/slippy/index.html +++ b/map/slippy/index.html @@ -7,7 +7,7 @@ - + diff --git a/map/test/3rd-party/index.html b/map/test/3rd-party/index.html new file mode 100644 index 000000000..afcc2b2e4 --- /dev/null +++ b/map/test/3rd-party/index.html @@ -0,0 +1,203 @@ + + + + + + OpenLayers - 3rd party + + + + + + + + + + + + + + + + + +
+
+

Useful 3rd party libraries

+

+ The libraries below provide additional functionality by extending OpenLayers or integrating well with it. +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
LibraryDescriptionMaintainer
OL-CesiumCesium integration library.OpenLayers
ol-mapbox-styleCreate OpenLayers maps from Mapbox Style objects.OpenLayers
OL-LayerSwitcherLayer control for OpenLayers.Matt Walker
OL-PopupBasic popup overlay for OpenLayers.Matt Walker
JSTSJavaScript Topology Suite.Björn Harrtell
OL-GeocoderGeocoder Nominatim for OpenLayers.Jonatas Walker
OL3-PhotonPhoton geocoder for OpenLayers.Thomas Gratier
ol-opencage-geosearchOpenCage GeoSearch for OpenLayers.OpenCage
OL-ContextMenuCustom Context Menu for OpenLayers.Jonatas Walker
OL-Google-MapsGoogle Maps integration library.Mapgears
OL3-PanZoomPanZoom and PanZoomBar controls for OpenLayers.Mapgears
OL-ExtMiscellaneous classes and functions for OpenLayers.Jean-Marc Viglino
OL3-Projection-SwitcherAn OpenLayers Control to switch between projections.NSIDC
OléIntegration of OpenLayers and Esri ArcGIS REST services.Boundless
React OpenLayersA minimal React wrapper of OpenLayers 3+ written in TypeScriptAllen Kim
GWT-OpenLayers 3+A GWT wrapper for OpenLayers 3+ written in JavaTino Desjardins
react-geoA set of geo related modules to use in combination with React, Ant Design UI and OpenLayersterrestris
ol-opacityA layer switcher control with opacity sliders for overlays.dayjournal
ol-gridA dynamic grid for OpenLayers - intended for use as part of advanced snapping controls.Symbioquine
vue3-openlayersvue3-openlayers is a components library that brings the power of OpenLayers to the Vue3 reactive world.Melih Altıntaş
ol-marker-featureThe OpenLayers Marker Feature plugin provides an easy way to add markers to a map and associate them with popups, e.g. using OL-Popup.Andreas Hocevar
OL STACSTAC support for OpenLayers. Automatically fills an OpenLayers LayerGroup with data extracted from various STAC entities, e.g. geometry and imagery.Matthias Mohr
+
+ +
+ + + + diff --git a/map/test/doc/errors/index.html b/map/test/doc/errors/index.html new file mode 100644 index 000000000..e6aa0d63d --- /dev/null +++ b/map/test/doc/errors/index.html @@ -0,0 +1,197 @@ + + + + + + OpenLayers - Errors + + + + + + + + + + + + + + + + + +
+

Errors

+

1

+

The view center is not defined.

+

2

+

The view resolution is not defined.

+

3

+

The view rotation is not defined.

+

4

+

image and src cannot be provided at the same time.

+

5

+

imgSize must be set when image is provided.

+

6

+

A defined and non-empty src or image must be provided.

+

7

+

format must be set when url is set.

+

8

+

Unknown serverType configured.

+

9

+

url must be configured or set using #setUrl().

+

10

+

The default geometryFunction can only handle ol/geom/Point geometries.

+

11

+

options.featureTypes must be an Array.

+

12

+

options.geometryName must also be provided when options.bbox is set.

+

13

+

Invalid corner. Valid corners are top-left, top-right, bottom-right and bottom-left.

+

14

+

Invalid color. Valid colors are all CSS colors.

+

15

+

Tried to get a value for a key that does not exist in the cache.

+

16

+

Tried to set a value for a key that is used already.

+

17

+

resolutions must be sorted in descending order.

+

18

+

Either origin or origins must be configured, never both.

+

19

+

Number of tileSizes and resolutions must be equal.

+

20

+

Number of origins and resolutions must be equal.

+

22

+

Either tileSize or tileSizes must be configured, never both.

+

24

+

Invalid extent or geometry provided as geometry.

+

25

+

Cannot fit empty extent provided as geometry.

+

26

+

Features for deletes must have an id set by the feature reader or ol.Feature#setId().

+

27

+

Features for updates must have an id set by the feature reader or ol.Feature#setId().

+

28

+

renderMode must be 'hybrid' or 'vector'.

+

30

+

The passed feature was already added to the source.

+

31

+

Tried to enqueue an element that was already added to the queue.

+

32

+

Transformation matrix cannot be inverted.

+

33

+

Invalid units. 'degrees', 'imperial', 'nautical', 'metric' or 'us' required.

+

34

+

Invalid geometry layout. Must be XY, XYZ, XYM or XYZM.

+

36

+

Unknown SRS type. Expected "name".

+

37

+

Unknown geometry type found. Expected 'Point', 'LineString', 'Polygon' or 'GeometryCollection'.

+

38

+

styleMapValue has an unknown type.

+

39

+

Unknown geometry type found. Expected 'GeometryCollection', 'MultiPoint', 'MultiLineString' or 'MultiPolygon'.

+

40

+

Expected feature to have a geometry.

+

41

+

Expected an ol.style.Style or an array of ol.style.Style.

+

43

+

Expected layers to be an array or an ol.Collection.

+

47

+

Expected controls to be an array or an ol.Collection.

+

48

+

Expected interactions to be an array or an ol.Collection.

+

49

+

Expected overlays to be an array or an ol.Collection.

+

50

+

Cannot determine Rest Service from url.

+

51

+

Either url or tileJSON options must be provided.

+

52

+

Unknown serverType configured.

+

53

+

Unknown tierSizeCalculation configured.

+

55

+

The {-y} placeholder requires a tile grid with extent.

+

56

+

mapBrowserEvent must originate from a pointer event.

+

57

+

At least 2 conditions are required.

+

58

+

Duplicate item added to a unique collection. For example, it may be that you tried to add the same layer to a map twice. Check for calls to map.addLayer() or other places where the map's layer collection is modified.

+

59

+

Invalid command found in the PBF. This indicates that the loaded vector tile may be corrupt.

+

60

+

Missing or invalid size.

+

61

+

Cannot determine IIIF Image API version from provided image information JSON.

+

62

+

A WebGLArrayBuffer must either be of type ELEMENT_ARRAY_BUFFER or ARRAY_BUFFER.

+

64

+

Layer opacity must be a number.

+

66

+

forEachFeatureAtCoordinate cannot be used on a WebGL layer if the hit detection logic has not been enabled.

+

67

+

A layer can only be added to the map once. Use either layer.setMap() or map.addLayer(), not both.

+

68

+

Data from this source can only be rendered if it has a projection compatible with the view projection.

+ +
+ + + + diff --git a/map/test/doc/faq.html b/map/test/doc/faq.html new file mode 100644 index 000000000..7c3a4c9f1 --- /dev/null +++ b/map/test/doc/faq.html @@ -0,0 +1,398 @@ + + + + + + OpenLayers - Frequently Asked Questions (FAQ) + + + + + + + + + + + + + + + + + +
+

Frequently Asked Questions (FAQ)

+

Certain questions arise more often than others when users ask for help. This +document tries to list some of the common questions that frequently get asked, +e.g. on Stack Overflow.

+

If you think a question (and naturally its answer) should be added here, feel +free to ping us or to send a pull request enhancing this document.

+

Table of contents:

+ +

What projection is OpenLayers using?

+

Every map that you'll create with OpenLayers will have a view, and every view +will have a projection. As the earth is three-dimensional and round but the 2D +view of a map isn't, we need a mathematical expression to represent it. Enter +projections.

+

There isn't only one projection, but there are many common ones. Each projection +has different properties, in that it accurately represents distances, angles or +areas. Certain projections are better suited for different regions in the world.

+

Back to the original question: OpenLayers is capable of dealing with most +projections. If you do not explicitly set one, your map is going to use our +default which is the Web Mercator projection (EPSG:3857). The same projection is +used e.g. for the maps of the OpenStreetMap-project and commercial products such +as Bing Maps or Google Maps.

+

This projection is a good choice if you want a map which shows the whole world, +and you may need to have this projection if you want to e.g. use the +OpenStreetMap or Bing tiles.

+

How do I change the projection of my map?

+

There is a good chance that you want to change the default projection of +OpenLayers to something more appropriate for your region or your specific data.

+

The projection of your map can be set through the view-property. Here are some +examples:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+
+// OpenLayers comes with support for the World Geodetic System 1984, EPSG:4326:
+const map = new Map({
+  view: new View({
+    projection: 'EPSG:4326'
+    // other view properties like map center etc.
+  })
+  // other properties for your map like layers etc.
+});
+
+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import proj4 from 'proj4';
+import {register} from 'ol/proj/proj4.js';
+import {get as getProjection} from 'ol/proj.js';
+
+// To use other projections, you have to register the projection in OpenLayers.
+// This can easily be done with [http://proj4js.org/](proj4)
+//
+// By default OpenLayers does not know about the EPSG:21781 (Swiss) projection.
+// So we create a projection instance for EPSG:21781 and pass it to
+// register to make it available to the library for lookup by its
+// code.
+proj4.defs('EPSG:21781',
+  '+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 ' +
+  '+x_0=600000 +y_0=200000 +ellps=bessel ' +
+  '+towgs84=660.077,13.551,369.344,2.484,1.783,2.939,5.66 +units=m +no_defs');
+register(proj4);
+const swissProjection = getProjection('EPSG:21781');
+
+// we can now use the projection:
+const map = new Map({
+  view: new View({
+    projection: swissProjection
+    // other view properties like map center etc.
+  })
+  // other properties for your map like layers etc.
+});
+
+

We recommend to lookup parameters of your projection (like the validity extent) +over at epsg.io.

+

Why is my map centered on the gulf of guinea (or africa, the ocean, null-island)?

+

If you have set a center in your map view, but don't see a real change in visual +output, chances are that you have provided the coordinates of the map center in +the wrong (a non-matching) projection.

+

As the default projection in OpenLayers is Web Mercator (see above), the +coordinates for the center have to be provided in that projection. Chances are +that your map looks like this:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import TileLayer from 'ol/layer/Tile.js';
+import OSM from 'ol/source/OSM.js';
+
+const washingtonLonLat = [-77.036667, 38.895];
+const map = new Map({
+  layers: [
+    new TileLayer({
+      source: new OSM()
+    })
+  ],
+  target: 'map',
+  view: new View({
+    center: washingtonLonLat,
+    zoom: 12
+  })
+});
+
+

Here [-77.036667, 38.895] is provided as the center of the view. But as Web +Mercator is a metric projection, you are currently telling OpenLayers that the +center shall be some meters (~77m and ~39m respectively) away from [0, 0]. In +the Web Mercator projection the coordinate is right in the gulf of guinea.

+

The solution is easy: Provide the coordinates projected into Web Mercator. +OpenLayers has some helpful utility methods to assist you:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import TileLayer from 'ol/layer/Tile.js';
+import OSM from 'ol/source/OSM.js';
+import {fromLonLat} from 'ol/proj.js';
+
+const washingtonLonLat = [-77.036667, 38.895];
+const washingtonWebMercator = fromLonLat(washingtonLonLat);
+
+const map = new Map({
+  layers: [
+    new TileLayer({
+      source: new OSM()
+    })
+  ],
+  target: 'map',
+  view: new View({
+    center: washingtonWebMercator,
+    zoom: 8
+  })
+});
+
+

The method fromLonLat() is available from version 3.5 onwards.

+

If you told OpenLayers about a custom projection (see above), you can use the +following method to transform a coordinate from WGS84 to your projection:

+
import {transform} from 'ol/proj.js';
+// assuming that OpenLayers knows about EPSG:21781, see above
+const swissCoord = transform([8.23, 46.86], 'EPSG:4326', 'EPSG:21781');
+
+

Why is the order of a coordinate [lon,lat], and not [lat,lon]?

+

Because of two different and incompatible conventions. Latitude and longitude +are normally given in that order. Maps are 2D representations/projections +of the earth's surface, with coordinates expressed in the x,y grid of the +Cartesian system. +As they are by convention drawn with west on the left and north at the top, +this means that x represents longitude, and y latitude. As stated above, +OpenLayers is designed to handle all projections, but the default view is in +projected Cartesian coordinates. It would make no sense to have duplicate +functions to handle coordinates in both the Cartesian x,y and lat,lon +systems, so the degrees of latitude and longitude should be entered as though +they were Cartesian, in other words, they are lon,lat.

+

If you have difficulty remembering which way round it is, use the language code +for English, en, as a mnemonic: East before North.

+

A practical example

+

So you want to center your map on a certain place on the earth and obviously you +need to have its coordinates for this. Let's assume you want your map centered +on Schladming, a beautiful place in Austria. Head over to the wikipedia +page for Schladming. In the top-right +corner there is a link to GeoHack, +which effectively tells you the coordinates are:

+
WGS84:
+47° 23′ 39″ N, 13° 41′ 21″ E
+47.394167, 13.689167
+
+

So the next step would be to put the decimal coordinates into an array and use +it as center:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import TileLayer from 'ol/layer/Tile.js';
+import OSM from 'ol/source/OSM.js';
+import {fromLonLat} from 'ol/proj.js';
+
+const schladming = [47.394167, 13.689167]; // caution partner, read on...
+// since we are using OSM, we have to transform the coordinates...
+const schladmingWebMercator = fromLonLat(schladming);
+
+const map = new Map({
+  layers: [
+    new TileLayer({
+      source: new OSM()
+    })
+  ],
+  target: 'map',
+  view: new View({
+    center: schladmingWebMercator,
+    zoom: 9
+  })
+});
+
+

Running the above example will possibly surprise you, since we are not centered +on Schladming, Austria, but instead on Abyan, a region in Yemen (possibly also a +nice place). So what happened?

+

Many people mix up the order of longitude and latitude in a coordinate array. +Don't worry if you get it wrong at first, many OpenLayers developers have to +think twice about whether to put the longitude or the latitude first when they +e.g. try to change the map center.

+

Ok, then let's flip the coordinates:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import TileLayer from 'ol/layer/Tile.js';
+import OSM from 'ol/source/OSM.js';
+import {fromLonLat} from 'ol/proj.js';
+
+const schladming = [13.689167, 47.394167]; // longitude first, then latitude
+// since we are using OSM, we have to transform the coordinates...
+const schladmingWebMercator = fromLonLat(schladming);
+
+const map = new Map({
+  layers: [
+    new TileLayer({
+      source: new OSM()
+    })
+  ],
+  target: 'map',
+  view: new View({
+    center: schladmingWebMercator,
+    zoom: 9
+  })
+});
+
+

Schladming is now correctly displayed in the center of the map.

+

So when you deal with EPSG:4326 coordinates in OpenLayers, put the longitude +first, and then the latitude. This behaviour is the same as we had in OpenLayers +2, and it actually makes sense because of the natural axis order in WGS84.

+

If you cannot remember the correct order, just have a look at the method name +we used: fromLonLat; even there we hint that we expect longitude +first, and then latitude.

+

Why aren't there any features in my source?

+

Suppose you want to load a KML file and display the contained features on the +map. Code like the following could be used:

+
import VectorLayer from 'ol/layer/Vector.js';
+import KMLSource from 'ol/source/KML.js';
+
+const vector = new VectorLayer({
+  source: new KMLSource({
+    projection: 'EPSG:3857',
+    url: 'data/kml/2012-02-10.kml'
+  })
+});
+
+

You may ask yourself how many features are in that KML, and try something like +the following:

+
import VectorLayer from 'ol/layer/Vector.js';
+import KMLSource from 'ol/source/KML.js';
+
+const vector = new VectorLayer({
+  source: new KMLSource({
+    projection: 'EPSG:3857',
+    url: 'data/kml/2012-02-10.kml'
+  })
+});
+const numFeatures = vector.getSource().getFeatures().length;
+console.log("Count right after construction: " + numFeatures);
+
+

This will log a count of 0 features to be in the source. This is because the +loading of the KML-file will happen in an asynchronous manner. To get the count +as soon as possible (right after the file has been fetched and the source has +been populated with features), you should use an event listener function on the +source:

+
vector.getSource().on('change', function(evt){
+  const source = evt.target;
+  if (source.getState() === 'ready') {
+    const numFeatures = source.getFeatures().length;
+    console.log("Count after change: " + numFeatures);
+  }
+});
+
+

This will correctly report the number of features, 1119 in that particular +case.

+

How do I force a re-render of the map?

+

Usually the map is automatically re-rendered, once a source changes (for example +when a remote source has loaded).

+

If you actually want to manually trigger a rendering, you could use

+
map.render();
+
+

...or its companion method

+
map.renderSync();
+
+

Why are my features not found?

+

You are using Map#forEachFeatureAtPixel or Map#hasFeatureAtPixel, but +it sometimes does not work for large icons or labels? The hit detection only +checks features that are within a certain distance of the given position. For large +icons, the actual geometry of a feature might be too far away and is not considered.

+

In this case, set the renderBuffer property of VectorLayer (the default value is 100px):

+
import VectorLayer from 'ol/layer/Vector.js';
+
+const vectorLayer = new VectorLayer({
+  ...
+  renderBuffer: 200
+});
+
+

The recommended value is the size of the largest symbol, line width or label.

+

Why is zooming or clicking in the map off/inaccurate?

+

OpenLayers does not update the map when the container element is resized. This can be caused by progressive updates +to CSS styles or manually resizing the map. When that happens, any interaction will become inaccurate: the map would zoom in and out, and end up not being centered on the pointer. This makes it hard to do certain interactions, e.g. selecting the desired feature.

+

There is currently no built-in way to react to element's size changes, as Resize Observer API is only implemented in Chrome.

+

There is however an easy to use polyfill:

+
import Map from 'ol/Map.js';
+import ResizeObserver from 'resize-observer-polyfill';
+
+const mapElement = document.querySelector('#map')
+const map = new Map({
+  target: mapElement
+})
+
+const sizeObserver = new ResizeObserver(() => {
+  map.updateSize()
+})
+sizeObserver.observe(mapElement)
+
+// called when the map is destroyed
+// sizeObserver.disconnect()
+
+ +
+ + + + diff --git a/map/test/doc/index.html b/map/test/doc/index.html new file mode 100644 index 000000000..d64369029 --- /dev/null +++ b/map/test/doc/index.html @@ -0,0 +1,91 @@ + + + + + + OpenLayers - Documentation + + + + + + + + + + + + + + + + + +
+

Documentation

+

If you're eager to get your first OpenLayers map on a page, dive into the quick start.

+

For a more in-depth overview of OpenLayers core concepts, check out the tutorials.

+

Make sure to also check out the OpenLayers workshop.

+

Find additional reference material in the API docs and examples.

+

Frequently Asked Questions (FAQ)

+

We have put together a document that lists Frequently Asked Questions (FAQ) and our answers. Common problems that may arise when using OpenLayers are explained there, and chances are you'll find an appropriate solution in this document.

+

More questions?

+

If you cannot find an answer in the documentation or the FAQ, you can search Stack Overflow. If you cannot find an answer there, ask a new question there, using the tag 'openlayers'.

+ +
+ + + + diff --git a/map/test/doc/quickstart.html b/map/test/doc/quickstart.html new file mode 100644 index 000000000..1de676c07 --- /dev/null +++ b/map/test/doc/quickstart.html @@ -0,0 +1,165 @@ + + + + + + OpenLayers - Quick Start + + + + + + + + + + + + + + + + + +
+

Quick Start

+

This primer shows you how to put a map on a web page. The development setup uses Node (14 or higher) and requires that you have git installed.

+

Set up a new project

+

The easiest way to start building a project with OpenLayers is to run npm create ol-app:

+
npm create ol-app my-app
+cd my-app
+npm start
+
+

The first command will create a directory called my-app (you can use a different name if you wish), install OpenLayers and a development server, and set up a basic app with index.html, main.js, and style.css files.

+

The second command (cd my-app) changes the working directory to your new my-app project so you can start working with it.

+

The third command (npm start) starts a development server so you can view your application in a browser while working on it. After running npm start, you'll see output that tells you the URL to open. Open http://localhost:5173/ (or whatever URL is displayed) to see your new application.

+

Exploring the parts

+

An OpenLayers application is composed of three basic parts:

+ +

The markup

+

Open the index.html file in a text editor. It should look something like this:

+
<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Quick Start</title>
+  </head>
+  <body>
+    <div id="map"></div>
+    <script type="module" src="./main.js"></script>
+  </body>
+</html>
+
+

The two important parts in the markup are the <div> element to contain the map and the <script> tag to pull in the JavaScript. The map container or target should be a block level element (like a <div>) and it must appear in the document before the <script> tag that initializes the map.

+

The script

+

Open the main.js file in a text editor. It should look something like this:

+
import './style.css';
+import Map from 'ol/Map.js';
+import OSM from 'ol/source/OSM.js';
+import TileLayer from 'ol/layer/Tile.js';
+import View from 'ol/View.js';
+
+const map = new Map({
+  target: 'map',
+  layers: [
+    new TileLayer({
+      source: new OSM(),
+    }),
+  ],
+  view: new View({
+    center: [0, 0],
+    zoom: 2,
+  }),
+});
+
+

OpenLayers is packaged as a collection of ES modules. The import lines are used to pull in the modules that your application needs. Take a look through the examples and API docs to understand which modules you might want to use.

+

The import './style.css'; line might be a bit unexpected. In this example, we're using Vite as a development server. Vite allows CSS to be imported from JavaScript modules. If you were using a different development server, you might include the style.css in a <link> tag in the index.html instead.

+

The main.js module serves as an entry point for your application. It initializes a new map, giving it a single layer with an OSM source and a view describing the center and zoom level. Read through the Basic Concepts tutorial to learn more about Map, View, Layer, and Source components.

+

The style

+

Open the style.css file in a text editor. It should look something like this:

+
@import "node_modules/ol/ol.css";
+
+html,
+body {
+  margin: 0;
+  height: 100%;
+}
+
+#map {
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  width: 100%;
+}
+
+

The first line imports the ol.css file that comes with the ol package (OpenLayers is published as the ol package in the npm registry). The ol package was installed in the npm create ol-app step above. If you were starting with an existing application instead of using npm create ol-app, you would install the package with npm install ol. The ol.css stylesheet includes styles for the elements that OpenLayers creates – things like buttons for zooming in and out.

+

The remaining rules in the style.css file make it so the <div id="map"> element that contains the map fills the entire page.

+

Deploying your app

+

You can make edits to the index.html, main.js, or style.css files and see the resulting change in your browser while running the development server (with npm start). After you have finished making edits, it is time to bundle or build your application so that it can be deployed as a static website (without needing to run a development server like Vite).

+

To build your application, run the following:

+
npm run build
+
+

This will create a dist directory with a new index.html and assets that make up your application. These dist files can be deployed with your production website.

+ +
+ + + + diff --git a/map/test/doc/tutorials/background.html b/map/test/doc/tutorials/background.html new file mode 100644 index 000000000..184405366 --- /dev/null +++ b/map/test/doc/tutorials/background.html @@ -0,0 +1,105 @@ + + + + + + OpenLayers - Background + + + + + + + + + + + + + + + + + +
+

Background

+

Overview

+

OpenLayers is a modular, high-performance, feature-packed library for displaying and interacting with maps and geospatial data.

+

The library comes with built-in support for a wide range of commercial and free image and vector tile sources, and the most popular open and proprietary vector data formats. With OpenLayers's map projection support, data can be in any projection.

+

Public API

+

OpenLayers is available as ol npm package, which provides all modules of the officially supported API.

+

Browser Support

+

OpenLayers runs on all modern browsers (with greater than 1% global usage). This includes Chrome, Firefox, Safari and Edge. For older browsers, polyfills will likely need to be added.

+

The library is intended for use on both desktop/laptop and mobile devices, and supports pointer and touch interactions.

+

Module and Naming Conventions

+

OpenLayers modules with CamelCase names provide classes as default exports, and may contain additional constants or functions as named exports:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+
+

Class hierarchies grouped by their parent are provided in a subfolder of the package, e.g. layer/.

+

For convenience, these are also available as named exports, e.g.

+
import {Map, View} from 'ol';
+import {Tile, Vector} from 'ol/layer.js';
+
+

In addition to these re-exported classes, modules with lowercase names also provide constants or functions as named exports:

+
import {getUid} from 'ol';
+import {fromLonLat} from 'ol/proj.js';
+
+ +
+ + + + diff --git a/map/test/doc/tutorials/concepts.html b/map/test/doc/tutorials/concepts.html new file mode 100644 index 000000000..3e75e9682 --- /dev/null +++ b/map/test/doc/tutorials/concepts.html @@ -0,0 +1,142 @@ + + + + + + OpenLayers - Basic Concepts + + + + + + + + + + + + + + + + + +
+

Basic Concepts

+

Map

+

The core component of OpenLayers is the map (from the ol/Map module). It is rendered to a target container (e.g. a div element on the web page that contains the map). All map properties can either be configured at construction time, or by using setter methods, e.g. setTarget().

+

The markup below could be used to create a <div> that contains your map.

+
<div id="map" style="width: 100%; height: 400px"></div>
+
+

The script below constructs a map that is rendered in the <div> above, using the map id of the element as a selector.

+
import Map from 'ol/Map.js';
+
+const map = new Map({target: 'map'});
+
+

View

+

The map is not responsible for things like center, zoom level and projection of the map. Instead, these are properties of a ol/View instance.

+
import View from 'ol/View.js';
+
+map.setView(new View({
+  center: [0, 0],
+  zoom: 2,
+}));
+
+

A View also has a projection. The projection determines the coordinate system of the center and the units for map resolution calculations. If not specified (like in the above snippet), the default projection is Spherical Mercator (EPSG:3857), with meters as map units.

+

The zoom option is a convenient way to specify the map resolution. The available zoom levels are determined by maxZoom (default: 28), zoomFactor (default: 2) and maxResolution (default is calculated in such a way that the projection's validity extent fits in a 256x256 pixel tile). Starting at zoom level 0 with a resolution of maxResolution units per pixel, subsequent zoom levels are calculated by dividing the previous zoom level's resolution by zoomFactor, until zoom level maxZoom is reached.

+

Source

+

To get remote data for a layer, OpenLayers uses ol/source/Source subclasses. These are available for free and commercial map tile services like OpenStreetMap or Bing, for OGC sources like WMS or WMTS, and for vector data in formats like GeoJSON or KML.

+
import OSM from 'ol/source/OSM.js';
+
+const source = OSM();
+
+

Layer

+

A layer is a visual representation of data from a source. OpenLayers has four basic types of layers:

+ +
import TileLayer from 'ol/layer/Tile.js';
+
+// ...
+const layer = new TileLayer({source: source});
+map.addLayer(layer);
+
+

Putting it all together

+

The above snippets can be combined into a single script that renders a map with a single tile layer:

+
import Map from 'ol/Map.js';
+import View from 'ol/View.js';
+import OSM from 'ol/source/OSM.js';
+import TileLayer from 'ol/layer/Tile.js';
+
+new Map({
+  layers: [
+    new TileLayer({source: new OSM()}),
+  ],
+  view: new View({
+    center: [0, 0],
+    zoom: 2,
+  }),
+  target: 'map',
+});
+
+ +
+ + + + diff --git a/map/test/doc/tutorials/index.html b/map/test/doc/tutorials/index.html new file mode 100644 index 000000000..fe8df503e --- /dev/null +++ b/map/test/doc/tutorials/index.html @@ -0,0 +1,88 @@ + + + + + + OpenLayers - Tutorials + + + + + + + + + + + + + + + + + +
+

Tutorials

+ + +
+ + + + diff --git a/map/test/doc/tutorials/raster-reprojection-resources/double-occurrence.jpg b/map/test/doc/tutorials/raster-reprojection-resources/double-occurrence.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e714f6cfea0d0550813263f0443b4fdf0442015 GIT binary patch literal 104113 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�O+_+u^2jz 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�C|qS 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 Yr7UUwS~2RY(xoX&sUHS0;{O2u*?@=|SO5S3 literal 0 HcmV?d00001 diff --git a/map/test/doc/tutorials/raster-reprojection-resources/how-it-works.jpg b/map/test/doc/tutorials/raster-reprojection-resources/how-it-works.jpg new file mode 100644 index 0000000000000000000000000000000000000000..508dc46877f294cbf1b4623b9b6d6ec91c687b50 GIT binary patch literal 129810 zcmbrl1z46_(>8q5At~J{4bsxmAl(fj-Q6LebP7m!cQ;5&mvnb`gMjFF0q(us&-;GQ z_aDc9fd|*UVrJH?nR8~%y8SitYXyWNA^JuX1O^5IfdN0DU-KYe5X9pH2|Q2_4-5=6 zGz`o$SUBM48R|2HXTUEi@^fS);2$0a8X5*35iSlc5d|qJ1tUEpADN{~j5IEfeq3gum z{2<0&1cR>nr!J7cNE?DN4hWhVEY!Q3zmpgS&*7;D>{%!XyO+@byDu~p81U{BNS|YD z={H4K11%hY(&N+lF|Tm<=@leI`rU9n@0CC@c<$VcH#itp!;As6f6Ofp5>a15MoSp;aoVHO_+DMR&Qx}VlqvS0YQER-cJjX&Yy&TT8j z&bAp7C~0pmqg8V;jpSLHgT4>n!B%IJR%Uc?Qs8O}f0eJxL&f~;2Y00lYoP7#!H9zi zDxgq^qiGzm+dXUt?N&&{&W#Y8n42dT&{u`SXk)lu8{rwrZ zc+Re)Hgd5p9fl^#L9Cm9Cms6~+#dkDkZkI3P9m!FMOZ@t9eI|RB+}-j&49BFkSo@< zzqIO1pY0b&IVdhkRc4N$c`+p=v442)U~?o!+Ik&dZB=;5b2}Wza{Jvz>YlMTAA9Qu zdTQ9>e4DVo?l@Uybi@6xfXw{&QQ$aOx~KfvINi1iQaPN)Z?H=b2#1e6R`_-Us^W~R zLfMyBJ9Dv?A!=^FPb&^8V_Fl)R+SA%&+9a-_|MLTO^psLHQ;zfrs zq#B&K?+i=_hDZqd+>t{vyo_A+?zL00r&eKQy5IOPY7avX6*&{-g@ES-qc}taCIX~{3h5X42hchY)!l7UJvBVc!6(4gV1i*Z)MYAO;;su{bO;0StP68?M4c*Hl$bQY=q;|HqasNsk}^u{XIo5 zc{+_2vIvLnjg9Sct=^_ty&**S7E58j8KmKHuOTbjxD0k$^8?jXT*Oew*Gh(z*V57d z4~gqL5x&1Ss@^0fRV9k(Jl76kT3n}yaN1lf%B^$OM=5YnZKu4RauTKXd~sg5h^Rzr zG@?W?c5SRV;BNYFWoW-PZhij;<=$G`xRA{T7f2b`W%SSmx0G@-_B9fP`{(^HoBaB& z#nG>ew%+ElY+eUi6R8J_?e97#5iVhYkOPj&L*H~TQR0)03FJ=n-8E24)&&ABF?Sx2 z42*=>6n7NRy3V1`dN!*s+`DZ?k6|xG8XMFFojr9p^(rb&w1BuYus;;4OP)w%p?Pp50BfGddu_k8t-JKNp~)<=0N}Q!B`f)4f(jT2hf4I5{K2& z1MSpP-S7MZP+kmjKUvxdz}!`ujexXCa~A)8|)EA`ohahLp`r>M}BRiY$M& zLdn`2!&;2=?XHSR9MnkL>}UI9utsI3inAb=^Aaqjw(Pq+Asa)ur|m4@*?ZI7B`H>^ z22}sJHZ#M!jSt7(zAnXTj**ESBNGSQ@q%P=s#$e?QaXZYuN=Nj4>=kX>>DxFtn`AZG`fEJ!zS{FVZsqxAjvxQvYdv^iWG;|=L`w+ zkEd8h#g{VC=ngZiQ}?F&0fmIPhZ51NpF!KgmfsVkmc%_%g4x~-M%{%K%O(pI>KYcS zpEQ2~o>})j@WPk2>>DFWeVa@A{0~^M;IBq6t&9q5aOwAWwbYv`CPj5dy_{R8DOO3F00=2`tm__Fm_Ic=}|22f}5vwk_qzILj7y@W`(9bo15)2#K5+I;H; zYbX3tui`aQa7_g{=cOIUoSjismvC6xM-|2Fbam|(=* zQ?-vA#8`!e392eO=K}++ZhhtqoH&f1t7Emw5`=kj?1t>H*$L!L4ERwyouVc%DlA(Anbm1@m)L;?KP--LEb3sp$YT1lVIv{xjpFgFs z!)@jikIcyCb8pw?sCPNzgMK(}rvT8%y*BXn>t;&kNuyRzM`Zn28+}XkSwX!sZyf(> z$lcY^hjIc^*Fk6}aG<)$#- zroI`8P>GP`{v*a?VYi(MUh^Zg-QQ2mVX%etHj>&k*Eu7ne5tdC4XroNs**^0b|~>;9U#*Mq9bX_qNgIf z*IV=cT!_+_bQlYmPJdtv17rKTpOqcN8?c0V#}`#aK_fqSe^BD`){UUOw6u0~y|aZ& zG1$NH+Ia&dX=!pDPLs7LdU_tBaoMR!eJg?TsnEyjXu6K1>d znfPZGKuV&R%S0b~ZFa9+Tl+zULo^2_Hfi%Edd~b;QSw!Z`!C>F*o>zgb^NBp?EREB z6R`_~nmL!d?yl2bZ?5gvCA919@+m}kS1(nVSA(M@p$0c5)LgnHe`k|aUklql z$n*e$^Jg_C{7dp$o1Q3)M(p8mD2q??nE;fsSQ2G@w#vOVc3+-e%VBu0bt6~%x-_$# z^P;axQRB9xn=!v8Xf}mDC={pmG2M|Y(q5_lu9_x{RR5)7wTPSb-)W}B3Lv^bmX9VW zqS+*7c(hl}`SsW@kfiMb*L@6IPdF~ulBLW{Q@sDaUg1G2`v8L6^MrYX-M@AfS7U5C z*fks1H0Lwd+F94TgZ}`Tb!`2(V2nmwal}d#?%~YZA&TYgd8hFJDOY{;%g#PfcxSOG zI2gyVQmv|SMR!Z#;gyZ)fea_+41m6?fwe#345lhQ4@0@uz8yOK0?q%2BXxE5z%Sx* zU{u12^r>hXXrxwc@P&z_j3g#B%xS+swh@=u>ZZ{|Hk>Qt6gAvZd)m*31U}o1chdZ# zM8wKq6(h=&Hi7S7Su#xLFOWjd$F66KtTwa;h~$|#mNmaXukLBHHp>>(k}DErhJxH^ zJ!4X7L&)G`y&6>)@+Pt;jB(x3uvq|G|F8!;n235XKEm_!ne8OfWe;0Ygie|w!=uF* zv`gH#z^sPVTw9b;0-BjnW#2&}q?fMi2(G!}daW~H+5`9eG31zR3L3ig0 zwp(5$I>HDr0DJT$*t$BI3y~kmWwW>#iqg)>S=t&m|CmkurXJB}>5&DjzI8vl(voio zJq}l4FC5ITZtsnLvQbA}br)*t1Xmi$bLy5I;2RaCh}Fy5uJ{aea+#xH8$L0p)^Obq zc3F!%7~BsTfWrF2ozmi7vw@6vUsikmq#1r;4Z(q0TEe@!oHO6$#;fgiCp5c#Gu_gW zypt78qOF!Axqmqm&ZrZi#)e4<{uKMHmI^TAT5#T}KNvh|wO{eyFhIFEGQ^K_D|txd z6|#2s8DvTmk;6UL3gcy*_{zY#k@Lr*b3c5c0SSv<`h~^;u{$3pqSvU0I(<12-rM2S zRwWIEaEn_#yn(cuX{=b-3*$Gff0L$QQxDigv%iMA3<$?*#2(;a63|eE%Q-*baOF5K z;%l^mx;Qpg%QnY@})cJzQMlDze z3pFkQowbL8vok7AG!*6443R(k^kU_p;hLY7PcnAy*3S^@q1|ySmbJ<62G7kJ+w*?< zINAE$y4@*HhCuI(&ERE)X*aQi@xZ(5o%8}Mo>__Aw?yz2DpmF${kSBs4N{BPWla(c zYvy=3U&>a2zB}&)UNO65Xr?2vZnmO-8{+Z&nUc!hoOqus=tz=YW_47$^S(!OPj&G} z9){Mrjb2SG^EiKrHg8Z51$`S4yk;X{R=KapC)IzZIE9}OQqkRwiB+dMDgARi1WwmB z4^YM=J%2yB)#w=^E7MbGKm3xQ%3$HAeZzIijo;vkCc^mhA}|GD0T?nr#@i0HOb?{q z#neKqN;;6)N$nk4GJF_6bGujGcs^4heidb?Wc~Rc4i8uf1Si`(`kx1FUsNRPhQ^Oh zWp?2XBQmajTwcg*PcB0x2)Pqa{sMi2lGL>dXX6RV^_gqvPW{@AFt5vp*Z}^Dd^cR9 z$&Gns{La;##T51`%2nZT;tv*B2B(5`{9T;Z&YY^aNvh-1^99%4msgbGk|U#U?q7}1 z&cY;_?<@vzqZH)bWrazSkGGX*t>#rQ0*DSi9}y!ib#}Q}b@UMaYfZ(a zzfb129;<2Sv<~>D^X~Oxdv_xYT%IYWt@Uj4d=jtrU{noAO~KB43+EXNED%S7Ll(hn zgk<&far73zZsyq#q3`qdYV@O|2@kWQ2cRS5S$NWDmVXG_iDFnUt&rGy1A>dXj61_5 z@m;G_ZEL3S>1ga6Z96hf-E!5Um)z{E9|rB!qP=Dldu>}nai@q8XIW^BC=%ce*bkbi zubtTT*Lg#%izD}BQp{f<#3Z5YjL)n^!g>ANjZ7a@b~M=wnH;s z*UPc76wC37aH$&n`(X6PTsF6Adp6V%?y4dKvqFrJDCNl75<~nFs%Jov>!>+_j(cRzh z5b@nZ7JHgJ)wu-Mp;=O3Av!m%-QT+;*j?C6-{wMBHHtke;R{_I7($D8Xb_^5r+>lX zZoz#HF{8_MIr(aCZi)B(qU<*iA9|hOtMckQ*s?0)&2sl@&!%OKM;m(oLC{0|F9s0! zXWh1usTzy1wE=Z9ghU3@6$F?3l(w2pv9@ptHWx(=m+lzH4Gw%rx8tVXn=-R1NFUP} zO1wt-AL&nI|Yh2Y0RPn%uuyX2e3d)uL~7p7PG zO|q?v4vu@Qx9(O&^>?n00){Q&;or&qTk5Fy;|eL8N^57^yHjf}retBK84hz69-+?N zT!>t3e(!qL^B*pmC@GuKC`+n~KXV=r`uYeB2Je#Xj&?Rv-?FJUFC@Bd&9_$8TuU0V zK@H9Btm+Idh2L5?&Tj&hzoJyfub=hOt1`aOg&wlwriNU=bj0q6ZbdU8&h$Fe9s|*m zZ0^m<&Gimt5@Eh?vy$agq0k;@gwCMbK8$_3txLZ#(u{MDKHNk!vG-EK)ZKh`Bo~$S zX#d+7k%UXb*mZ0r?@m!2PyK1WMelH)Gw0-$8&Aq>Y47jw1F$72ji^Cf+?H7iks0IC zU5FmO3MyspN_q1uB#{=Y$!EZ!x5dB~_aDuX_2XU*n|q62-T6|$PT!7_V17<)Rki#C zWYq1C5ZEdJDOkUJ_*A6qX141E(WWM;!|p{L4v8)g^_Ru>8O)h+@8Ub2mTe~t30SvZ zdAwI@=F(4Y;<;DA{yOfA9VOUIB=@^6H)egQLK)!#BzD;6W~|ZeK%G=b^*rZe(~~_} ztZWS<`1m<))UFaJHp?tbxVcl*@caT<=9C#dkIM>k_eGK5YK@J0U0UNO0qcU?bnp4N!b#5iW#DFl(Y}}I6Kxt~ zR-wzpVc5%3`ANmW=E<5a$nk=bQQ_W;0+&T^00^VEJJtl=9e5AdClE2 zxPO6O7R|z>*>*8m%GDBi=*SZsMDY-`++($N2K@pl+3$P3tdaN45ySwD zKd4BMQ)@V@W$m%X&A^h%56Wcy1(J%Nv`n>Ty?#@1)7rA**quW`9NiJ!6<2uZ+t0Db zGCvxSskzcqH?-{Wa0G^ZxP&N?t!o`Xir0Yr4Xdb#o3?fO+eEeALZsd58zAIV9?Zb0 zgD-f9P9u_uZkw~HyKo(pFKuqBb_pozx_V~AM+n`U-^2d`?eazNjR!Pd{#9LbdaoJz zhe6T?E@TzL6%_wG1eC7NVLt%mc7361E#DSh9QW>j%G^suNJAedTJ{!auS2JtY z?Rz0`^qMEF-8uGa?u=z+YAJbrq?;BzTDl1l{oWc*qaEQpFtjUA2f4O~MO5e*6ukzMCa<`xA(E zu|*9!7sIewj0MK4XmpM;xW2Je0ZV z;+e6BX&2jYG3Nel=u;7v zSAJHh_G9eTg%t6R?0-nd*pBW$=o%p;)NUBW6bn!`mVH*)(NbQ&vAUaQX)T*oru{7b zrk2N}r3GUnTxj!P$~Hm#0*@gc$fh5vYQVKnhy{hCbFGq#r+nW(_g8sBNLMtk8@&ay zaJq#ch&x*5w{gtgu^ZuZR3|xGFr_AzPF{ZJRX=MxkY(r;fruB$W`6A@Thutd1`6 z9Gyfi5tG>3lk^Z9bh$U^E5cU}r{b2nn~^NDGY5dnO^Kzy{4 zFDJK43{ywM0$MqbHt~|(n@^8Yi3I+-(2R6~mNN9lI9gYPuVTdKy5(p;kZG))J>0we zetXxL)so+wF`Rxm)MUGRe0qN7=$eZU ztm->n_2YvPDNV!5Qz4$Qw6_F3M6X)&fG{^@O4kz*!O+z9H1h$0d$A1|b8=>wy9Kmm zIhl^uaTcAqzIa}K?Q~o}Ic|>p1#*7}j71dXFl2QmN~KbXGd z)!{ozZCUn$(W%Ot-8#D7Z~Fe7mr%!ZDgQY0?)MDAEIMXrW&|8;1n=ETH=bmVJ84bA zrGp#yFWk~tS@WBRM`KPGZl@UA$G4Ebg+mAd?!lQpK_h%DitTtEVO%vnO*nh&!FRL_ zBUV+$w^UmvE5PZGzQzJ0@g*Zsqe5O>%z#9%f9d_2n zjHDF@YQA>B%nBpBi?i;qa!@20d!q7OP3aY(fy+W{;H=N>K8oK;nY9FGv+kS~*xvn4e?uuq>`4s2Vt`V8P1C(QwQt8fDJlp{Vb8wGYJn z&ZpfnW6JsWEI#jh$CAYeD}89!Igkpr)dcfPGpadxRRWty74pnN^iqUY7i?mdh95Q- zV~+%f`mIDZ@+TD)OB&bBHek?d;hQo)oe66tg<3%6QQ4rdYEIEw@f;d0zurq6<=F`n z`W5yA*i7+02V0zX5umcb2VH<8dJK@FN{JX`(S?Z>X#0EO(pmu0OX6x}#_o!l{k_ck z>8M80S^>ROsiIEQ{pZ5M!xr_>mj!r`4L?G8DFqOmvK|%z+OvqEty#I|;*=LoEoP6* zzv5$u8y(9Q}6tD>+Pr|6CSx*uNA9dVDy;Eu^*v=+>hx^gz=RE+g_|fKiW5 z??Ly&Rt8YdIlfV7(t%?g^uSj(oY+%04cDL9E5sG(2F$v8z|mv%PRW^GBWy2NWusn^ zmSy6et3=hCcT7_CRYFslnLC|_et#jZ;HkH@CIQ>C784pu%l8la6}2i=Jfd)MYXgEa zgUopxdTbDYA^T`h*@13laQpC@)$RW zv=Xc+7vBWuD2QuFN0o1A$u#yJyy-~~fP*3ED7dU1+1W5CjYNElRcY4uDQpBp76o&@ zrPh1P;}d#RM)TVgh@tu7UdtQru|1DK5vdtn4BN+WR20`?glBqIHlZSR#+qr+xX48s zQ}JLo#5gIT{bg@%?;LXmHrG5$mtGaq$&D$k^N$4Xv5Bb6uAku0-u3-9hfhqi$;Fry zI%P^~nQO#})4Df!XrNJ*(-q^dRu|w@zd&3;QG1SKY){4$qob!g-aupRKsA;|En{@a zm6fT>Y{q#CCWvO9N&aD+BXmpRjyFF?ix_ZKmv$!33)iek3RRxojO4MMEe|>z&ChyP zK53}#73SqPc|v$EBAYLBD<9nK6N)u~Ao1*O_X$w^~R1(Bi78G)QPhI#V)!6+95?^bPMySj}axB0o}+4Do$G&4VZT@`E>F42w5ZcLl3H zzvR-oX71@^GFC&J7o^YE98g@`Sc^GKtEnP*@DEZDlnbRiN1;0^_xsAliuNspm{?_J z&{8#NVEM@QlANQf_}>ex_PY3N~#H{^86wq zV3?jliue#OVU;kT-c;@`8Y;sjeqxCnkmMKPSkKki_T5N9<-%CHb2V1t+2%JQA+U4o zFJm#>w4CGGNXmoY#ILSKH8+*Ps{Q8b_azfwrO`2ku5Y4$(HqA_Fg>3}x@=?*=Qr1} zQS_1wTP{;M*SO+cF^mEP+yWLe^eAW@lzbZasLUxX=0e{gah%@GoJ3!`^>xzpTNeA6 zILaJTEX|3z0DK#SuVke%4a!^AjtYr?F|Ptk-Y-u7QXHQXYc)`}4!4vZt@6eN;R}hJ z5(Y(Ifn$skg&F^_7(G2ms*LB%A-o8xMWbI)I*hTh<^QC1tfBQQ2FlW56zYvX$*qAJ~R*yP4cv-tPxmDq3VyLaA zSk4YqcJ=NF^GSl~HsN%0Qb7_!%9OHPLcya-Mc_HKxcbks@wjoLYgW4tO2hTJ=i3bR zvaxWcbhdY6EgA!G0j(wjdpS15pHm`(9%HPZR#u;<)3_V8H?!qG9zx7~l26xIGpTa3 zmGI(C{@W^IFln3RaD6# zj7xWKS(VZYDVk|nPFgx<3%!#d=T$UKnkjkXnB{5 z)apXZFKasIbhlY?%UNdYtO}FMr@$EE=+-6jrN#paU4MdVsz4Gnsgre=i}G5_wx7-O2q$EH@Tjh-`My7B1?h9Y>eW~SjABu=(mRYN1FWeMiL;!5KWBoHKVoNR zD?j(FS&W&nPry=wk&qh;{)o4GW>#cd>Gm5<`Xq7gJBl?l^ivncwI(m)b+@Kg5YEpm zLAw%M0s(5)=B^Yaqz3p;_Nr8_3AdqF>+^OrWoDY*Qc+7=oq)rBgx?_>Amx9JLQw?r;pg1&;iR>)TQjfR;gEeB=hJk{h)Zr2=0TJaa#mu5TNm@(&7f zZ9Q8sGun1WqZ!rLQ=WbBmo^aPsYalw(PZ&LN&o^&Rcqq3rQFwY{|7vz)fQWx=_>?p ziGnOq!|7cCq1}||(CN6Ph0rX0cMXg6o4Kz_+S~>K$PPI%3)#nMdgv_h=9M)0L$G)T zUT$AUuu9RspP*=Ytiq}g^jsV#P%jJX7Pev7B5Tt^_*3lkk4I_W*?>r|SsHKR80yY*++(7WIn92a@Rt{0R@vAQ#9}U^bT_`7~1i<_MSZkB~*R@)Ii`JD=_qThhp{n0cZj8r1G}Ud!Itq zQ|F?91(Bzg&SKCQ2N}UO*(KEFq&;wK8Olq=mwrttl zLtlS~y8Js_TgAMO=GpYg}TFE0>#fp4foK|_NB4{#2CI{Sj4QJ)i|prK>1 z!C;awGO=QjGPA!DAY%Tw?e_G7; zPE7@(3Ne+NvH0O5Eh4rGhW{WfV!TC1c`Wg`R|E&NF8)&0?*#F ztx~+Li2U!A0b)^txFiXSTyLt&`@fd%|62-){~=KRDbwz!9?sA$X&X;`ZiE%#4yEh7 zLAmEHNnj*47_S!x+=1l&Fg8Cms&go3Q}u0DdYLQJ<%`WUcP)iO<%^iO=`e2OxnEDqA-w~$fQ|4$j7R0m_em4 z2!aMfCW`gG`N-M22yD}yJ-{eDs&n9h(K2N~V4x}dcmO}m*lwv4)cY?%eH~pNOh{m$ zjR0o-`q#-lag^l44{Hq#b!I$?I=g(}M)wc5+(eUHrSat5o-9}&e_zI%0Cwy!zz78M z4ZmJSqZyqUHOW*Q?y{|uzh}KNeT(bPS{BBesM?)6M7u6)^qHXA$@s6v>EDepr+HNp zNORnOj1)6^Z2Uexo8w`2FxK)1sfStS>#rXN$o`AO<7m@^!D@iXZ_WgNbB;O9s**AX zMEHlW=_6rtxs*J$X@pGF$R**jj~{@2iF;62|8I2#0P6aNBKUFQL1FArZliJ3V(@E< zaeicw8$Ymh1_Yl9M?6jUD!wnKn8rB?k`bxi)Jy@i(OWIlrnlWA!VI zOQZKEI=&j06+K1G!u#4?oaN7|_z5w2W*a=wJ3&SnrZo*|EK)+}(Bjwiv@*@_^PhlfW< zT*dnX9>i1$L-IO5N)A&fE+yqNOt^Gke4MPotezyb`)#I;zBg5YM$R%>WQ0;*$iKAA z{%o*xrQ}2-3Ae>K7CDPy9T#EFO+n&N+OpEpEe=M*hlBwGgY-2Kvh#Wl9*iv^9L@P& z(G}$vDEfF&WZ%pz{Q5bU^hKE9MQx)&qkVs!8>CL^w_9*@zO0-P<#&bpXP$l=4}N6- zv|qh(aZa0mnYWGqx62~Q+=jEi#f*oKAT)Wf?np|CVUmmo>vm;4<#hE#ySJM=L$ad~ z!e66Z3fZJF%?&n`=Kc5!)R=gaH6mgF|6?K}nvp{3+z_k_{PW%lv;}upn=i4IkD*7P zSKswf=4IC2|2I+p_C&2OO?61!goLCd*|huuh+z9Fankmsb~Y8diLe6gp{}1@&dQ4! zvuGmuviiF7F00~$Ud+=}G_^wsaKo|pU|nz%|Es!%U%|rcqwU~E1Abr9ls95D4B9FfCWj6Ca^Ac4;k z&&O)qUQQfWzCBGc?Xgy&miAJ*oMa*jmkrdL2TS^}N2%l(9(a=?S z#@s|hxf?%&cIId%nUfKeoN2BGmj7oFfWGv|@;cpO*L1;1fiJPj%J{5--`l2AmR#z7S4OtLAfiaz=ZHcDz1wQST04bP^9SXny8Fmw` z&iL^c*Gk8s=u(RmdxQNXN|Dd9$@u0;lv=Y~TYb~)G7XiEL{#xFN&fllU}|s{CM-dr z*4_S3qaztjd`}a6-6k3x`a58{0@m~VZAiUEQju4aL(xUI;=%3d=*)d?M;t9ocW*>}_^|w*3k<1BJL!!*BBu(v8szfEt8&S=BIT|_CX_E0~ zNLIf0AQhk(S|NsJRd&0IxWLW2kM?}odTSPbw`VO}TtuZJ!R@ribkXz*&7NchEN6Sj zS=fI*x@@lL%{oO5RmO9YaIfu_xHdFtRz*_N1KS^U!HJMe1q<2XOeVtKuc^SjAw=YW zDk>gx9+PZx4wEnLHq)2*{~Le|Le*tKYQ4$d&|YSkcZC%Vq+|utwHldRl8BY(NDEEaE-o(qpGv?WS!dr`XQzHEV##R)a*H5(*%4oH z^2KUMPd&cUlOHi82=;5)y&qFFz0ljdn@`Z1!y7rR7w6Wo#~CcDOB5G8(0M{Czn zE?}09;RiLlWqeg_N!EpX!jKw*!vUUBpOb=&AzU{QwMjkbo!Xj|gqA&uX`eU-Z|n>Sx-SQ8;=dA0uYsHkmNCXc3#b zafD^I1P;;{Q7v;2y+e2C^-|E6{{`|Kwup%_gzpoxTFXowY?d)I%lo00t1WP@V?1x? zc&DltKq|~M9Es6FRR8=brx}Iio<@`0VRTXIO&*jEg8RG$HVDHcoOKzlB?K|X@pQ*#%irkuKb9un!%4rR!4(NtFQAW&78flK+zLT}O8+xv_4^||D;TNO0X7XD$T9v} z7vSur^EWT7&}#!q)KlmuA9rlFrU5qFe%eZBH|*-o4u%4I&m@08UxvYwQ5 zj%xF(0{-SHMQ;6;V|P_Sp0rF7a{&5Oee6YXk$!woEJq*34AU~1^kJMk73U-1{ho7Yey)Yd#TjW|ALz?`ew74{1oWvL!KFnBW zLsz{Cdq=_6_=!jdXXdu2T28~C2TW`_w)XyPiWLC|N}SzFCF?__{7Id`U7juD(H3Ep znXyBR6>3Qb2EzxunU2w9ladnZeqwxEYG96;BO6VOC!Q`ql7M}@d34OctB+YVS_{`QAy9Ujghj{8Zg&wB&=_-2aJu$U^$khehz&bWGWTCn<(Li z9Yh|JWA-M6@;Uj@Wsd-a&Bs-GXSemzV=c$U{qUw{+iB-gE@KFr1Qx@i`yTD3`u(P9 z0$@PF)bmsM;09-8YiSuR$+8!VcYh5A$S9!LZ`k6)=uFpRAt0e#V=BWZsj25cZczfX zfNm)gN?A_k1ovj!(UnrjUj3APPRUeJHmLF1yiuuwT$g8|*^J|o?^iMNgMcv)0sxZ$ z)_be|Y35L*m4W=jF_7M0o|eRUi_LkwP_X4P#%N}c-PV5rJtmUu_+vDqBtrH$qx;lalof_MS=E-cO zHdA4Y(^L~YO?utz@P9P{y^(QdOh+B*FOr_aGiDYiVT?1IK{oM&K#xO;ZlxQ`P0*p= zm6H8M7GNgxBFSF#&jz56&n3EL{6H#IxC}_7btc_{cP%^$f^p zOA{E9&q|hju=1+;y#0{#ckL(D%;JBfy>n$=+GtF^Gu)%isXQzF^t_|6UPd+tJxW*< z9!``}{_dnmD7Rr|yM3I+OsIXoe4d(Wm>_boDI~<5?vyhjZmF+J)N`9DSJEqrRYe&x zmda=PO%(|V4QJynNsJA(C z-);}1qn*hQPEk=K!${R*iqxyH;%I}qUeD=ee&8VYiQ{DSu!r;}O$0yiz#!7{_#I(u z*u>m}2qVI0DE8Rsj3+s7T<|W#?%YbRpiS(xf509h3ParUUcy#+nX6$VN z)-uhQ-CjXdQgq*Wn9Wr(-T#HQ4~+6XdTI7bUBDOy2!}oE4R>9f-4_o$TVCuw!~nU z$~jMdM6LCuFUB5IneQ@Vn?4fcHn!))@!5g9x?q;g;Y z!f15|lGx(yEk?d9UZt#b`vEMsj9sn}{x8sodxQ(6twVFY2-t?ZLK0p)lafwIgveBo|IAI+o8<-$ zy_rSpv4J#rOyQ*ZfnlgD->s2!2V%=nF3+Ic!;r?y-plt~g=l%1)co^@|E?Oz%(nD( zwZ{6L$RB_7?y5oRS2F)<&+wXKfRIkR3KUncLizsTI<|A9DAqwb2xQ}|o4}(4K zs!8q&WwC`aVbC$}E(@l`lde)j6b2ZTX|l*aiBi5x9$61T^r|1S{RQ4K0Hx!|WH`d=U{ zmb@oDFBjySe*WxAb8_;n6T6?miXcRq<=rokjvJG(beJKD(AS)WaAJO)M%|JSP{sRylxS4*TVi{pCPqmE6Ak?Qg_>b#{(l+wHvL$mpT^Zh}maCX+LYM#G;NQfaqZx}8O_k2U| zUgB;~nFKzSw_97zNmjW2r|g@$1fIW+VFxy=6b10X?Dk*5PG<>;pY_33h0_(9H!Bw< zuws!x!BN;KJMDp^h4|Z@JU@D`tY6Z>=KU@&ku#$P}yQZG;*O4asg}@IK8L7>ujpY@>3u+5ciWxq<@Qj z{oAL~Tt+PZtqMhfB`vi6y@cJKJW6I$D!WKHu$wMca(i?cT`7?1>mpPT!AjuGQzZ_W zpx(m4hvuawFGL)Yj2)99is<&5Hmh7Iev6HCP^kknzv4&TVtW+Q{0fsr$2e)|u*BdG zVF1j0*hQpSdu}(%5cGddCR$d2WI`E8CMxFHSj96b5^c)!j2wyhCeFWauPDv#suWF$ zi#9;X+O)m6OgyT6Cf00OTZ&)EbQaXt>swvtTIKbYFY49kkQJFHvi72wFw>ALVI7uF zv#aAb>!PS3y#1s7XfFfhmZXMVm5!7zgGbTCl-AizH42RLrgh??i9!uc7#cYx<7}b* zGDnT~&YqWcaPS+<4k&gr-!`Jz}jIcrInchA5e=(SH!k$>!)>NA7#L%$KJr zg$>#CKa203$=eZRCKGO&$9#K8zix?K(o$)4lT>{%IVR;xg0nwCxF_I!6c%gWPB<)RIJWN7@H^$Ay#H7AfZZL2(M~{_Q{W&CrQmf*(@Z%BSA zc>Fd#Y8TQJ7d^6#&Y!Za4oL`EVHI6Pq;~n$Np;rRHKzDU?{y2qu3p;|sdOuIOGAlg zcNFeK#!2TVKzxjM`Z04e~MYISTFl%gCM)|2TC)bc2j7Y9j_SWI3_*oQar8|v`DObRX4{e83XW``9C6*lH z4SPT$OtO=iy=Qp$T5GTMt~H%nv%s@^?d5u2)1wpW{LN)_ z%4L3@QKC&Ov|m>q&l3J@;X45j9%{B%KFD1SOQ8DO_VRk=m!dA^0$zIkBj$fKmXg2q z(U5$3z2;vd3W|Go`qUA+G^*<$6GI=Da}P5^xOj7-e$W0k4-CQ`!3rKf$E@*Fxb2TjsDR~HU1%g;r*Srg7=ig zD;r*hwzPNTDL#{4Qc`buZlKDe)zLmfBL&L8;lSZ3Gu%oPvIPe1C zt$QlfNPQ|AxIvoIFK;)zJWC!ruG{-M6{z-kxTED_D`vHk|GWU4)Ov`~ZgIrq%9YZtZ>XM6csVy@i{Xq+fHc?E0Q$Mpr!6h3Yfuem z7IX-VNGeFRLD?Z!TSUWCwo|DSpZd|3zDx4P7F#~ahSmsoI)l2+@cYg#VsaJ@DZ`yr zdZmXesLMuC0to_Ll!wQyp(hzpzHfwv$`;9Z8=o_BPb{!2sYFlvw(eF*!h`jnKFj`% z*pn+$7WYyR)tuEq2e@ip+RycDZO2X#SNx;3ZD_(X$+Ew?rMl$s_?BV#I0EA{R`nUdTElexHO*Wdi`0jpg_DNZ0s7^tJqlebYv~rtJNC$d^{lO1g}(X>ama4m8wX zZ^n6x#!4Y~rKq1-Mbf!57cM_{OB8irIi&{pEo;Eo!!*Q~2KO_P6vCC%`CB69c(L99 z2q8XMvBZ?nyI}!ta?RFhE5kK^5F^rpJcP6`zBx$+1IVpG5dpI=j>0ma%SWP#?WaN_p+R{w0r!AhlfY032RKLMLL;fR`;0#jtEq8 z98bihqE0s7SB7|gZC(5@nE;p&7au-z&s9}L?ypBv{>W)i?C`z5@$F2t2tyeo436QL z(<9o`EEOF{m7MYP*jyo`g{8e?q7plH(acu~vD`{BikEkK<->O#>|)Sz#%>2W*1GcM z*Thma+W~c1|I;^}amF*fz3{~FxnyQK7kCnaizg-}`SZU=)lC41TCgONckVL*sR2h+ zUYK6i?(jm6UUhyE06CqZ+a?TT0_`E753Il~Hz-wdg0cB^S< zh{rf;B)V+w(!c3rpDx&G{caL29D9MAH_TTuJy~Q*e~wzR-;_J|_Y{uZWf0931IJ1z z#W7TuTMXt35onSM)+OrQQx4)~KzXnWkM}3uqxs@s;>`5H{u9prz}a&WBS}Ac%A=Ow zQ3u}t-|kABQ@im-QK0K}UJdnPBh^+PR+bNj^E@Txj|crAbz`SuAP#&+vKk&LG5F9l zb-Xe9Xn?h2xB2RPi<>vhzdzNiZE2^q-kY>6t6bgR?BT9&@;-qwn$Vn8(D6)(KT-t>`-pPYXRy zeY40a&7Oe9^BWmC{;}vdKECuKV6|_M(y^NIN#097=;`AJ9|B- zP1zQhoPdQeGSG+O`?ubSTcg`lEaC&r_HWxv8t%Sje%cBa+)Pj@b9#*mThpYVuxyca zS=p=%&nObl7?K1|8rbHnz8p5YBxKFfD43AuYiy!!ISgU@vGDqv1!q`7cSKqZjb4j| z+$#6(FM!+kr%re1>jDzJ>h5+8&XVz23+BtX@{BT`zva&NLf!3x;oj;`A|KLr*B;kds*2x06iPf?#8y9T?Qz+QYNuV-#dk*y zA&xy7PO-+Dh0}F#TRUjA0txwF(Da6|?m8D&| zvXTk$FUG3MxG0ct%9MI%Z2*^qU~+_A+y4>MKVK=CmA%P%Wt|YOg^fn;%E>Mj)oBmA z-#^w>DnEzP6*iA4x{wpreQnSt0VG{*)}OOoNs;mL(3 zNd+UjTyp3UxxpLD>zz*GE#V*44Qcwb@wA|CTj>|K*R$ndnn>DR!oPeOfi`GcqQmY%xwH{aF(IT@!cH)4t00hD6cSA%DQv z9_+1ta=dzI9pZblD5Z3{!zAR0RPu5Uyb^sY*fT^=aujCA<#Lq8Pshrdcg4#iNH4 zMF%W0xX|N#rRv`Hg%R)q=~w0noUXCQ8n0bxQm?q*U{`$QrR*vz*es^S8%C%Y@(xbi?;5VI zaTakgb=Pxgv~FM;T%aXAV+NTiL6``Bum*cng_9D6nxx`h z`zA)>?E`Sk)><~!A*VsbaM$)OtDH@ahEmm%Oe9H5aN$*)CK9R>69VV3PG!B@ zMkWmk3DxKdeRu8ICAIl3=#q}p(3fkH>=(#W>1wuP4^T}dwuOV_X%Uq2QSZfgClfqK*KJScs8|AWpI z>kO$@L3gD2!bWX_dB6uGa+W6%Ysl@*Q4x2QdC)gg&W!_{Hz46uyl6_wBt>4mhu}e> zEUL@=^n34k+#|O^GPWtO+yZr(K40=x4PCvBNu-*_#m|Jk7R;kge>|Nd5#VAVZ}rwh z^-U*8cxkp%g+wPQfNn>l`fwf9T=f6s9hT%}fi1b92iHGGv&JT$BMRK8Z5*_7{rhYE zd8s=K4`N%7g%&$B2s`uDbo)n}-b#%Bwuv6~A1w4q7!G5}S#{;~5Jm%{K4@*J*m^7P zi@P4iVL;2cZTZO@feQ?V_t5GN&VbFaq1M!$6{rnl0p3#gLx_p5FoSyi^t72wjNOfn z!e4;u*xN_cA2=pjlT1eHoN81#iYvE=Unocj8tce7I=H;{r%tAt@(t*37LLc+iFdj7 zDX#GG4ugzSRcOd3)++nczg4>VsHNL@{>wHzpNC8FrmA6;@@Q}(8LW}hSb%VUODV4* zb*E^uujXiBd=}b@{T%bI+?WdXQD(bRfwOs$o5PNqaHx{jh0*Q`P$i;U3F4wCYV#%k z`8^U~jWBcea7G6uTSd-mj=%B`<|PIEBp$%S@s&zl_a4n2vLGJQ=$ z$;Fc1ZRPmoj%a%O^O^@0=Svf#vwb_}vYjbn3T%EU1hVmSciMv6mWXTNDl>NQGoyVr zh)~@h+djL5O^cX-$71}UM}s7u%gGqZ{I*x^$o83@azdEB(d{g4bi}i?yT+4i%#HM|q<$tpn>YMbNnD3d6eqW8!nAFXe4h&`RJadV;Qf{UjL92HkHM;DWsD444133VEC$Bmsd=?1M74TO}@*4&srj-E^ zG+Hcu1slDxV`kMM{wORoBDq`b7a;C1asqim=22tebxUJ(JR)420D82wm~S)M&L8OU zXtNEnhZBni{}79%19{cP#5+xXtAsRu6_M)VWp*5n8Fg63vOfK+7P;~3ADOQaWnDK3 zDIR?@g$vf&aALE25I2~Y{=>d;7s9o3rqmZ_3jp%T(>}d>A^$@4gL?!*y+AmPSMuE6>;(;OI)d-tkR&_Cdkk z`L|ATtsZmHPj{Pja98x^bKv=oXq;kYC=xlQUo+QkIrb&DK*`e%7)RiapVk4B~uJgIOy z!4ZPj^dB)Zp)?V1pV7Dl)z!xIo0qF9KD#@Zb-O}4u2@)^Yd%Xun(n*jGUX|1Qk=G) zR!%!53*9kKw3Uo`&GpaScrJjNeqJ~?wF_pU4mEt0rcYg^QOk@3lQl3S=SpCPaG8=` zu9mwW!(c{B#PASje6Pu>k(=8tyoPN$o|C#NpQn4e&z>Ywl2L=kz~96*TD1uhZ6yG1 z-qHo@MuP{VjLN?NsAU!Iri*SRxJC+yYngjoTs+g$xefg({Adg)maDk>B+q;8aiy-T zQnRQP`qwb0zR*u3f{@!`_n-t2e#H)-OC$5A`40|W`75D^(6rAiE6Vk?bxOc-A%4fY z^NbbP$+cKq5jsj~s)V{Y_Gh&MyuoyktdHEvhWDcQ+nsjAbtQw2qy>Cp+LAL8h&Dtc zP;rV!U!Q&8ZC%p!X~~gT(lacBWnp?H@wUAs$JSi)duHWh%Pq2s)Sm;I9KnMgYUqjM ziE?b6<2Lo(G4NiVI-ML5EYOJe5kbN9iquV;*l5L>z{H)ZXSGxSYTA6OT0)=kfUvbxDt}Nk|B)>ByL>InDMe zPL6?iyW(Waf&_YI#0YXkTnsMJ_f@sud9XqCJ|{=e!bqLb+(<+$X?Y1}Qk7i$%Ixuw z&A>+gZDWEpz;&Tozmr&I5E=Z%z*Sibo6!=PJALDXsXBcoOXV}P|w3YmbCjH ziaCzOUJ_@puh`XX^LXBoiEV6 zqAknmRHM=W-z2z%pY8>l{-{D{?px`z?nsZn@_rg`5 zPOIzj^0QuA!N+He8vE}Y!r$%|ZZ!a*+P3L?V+8Cs#a^G43Lzkgg~am}m);{`D#H{i zX&Jo17vpwv>-VghfsB=>FX!8-4TnY zF+S`$Pw|S!)CVr{M_!85Te-Y&nKC(&>lc8f&n>98>ZKVv8fe~N5E+S6Yx`Tn=XTdG zz|tl7FF-;AsqgjR*Es%b>#dj5mBpJpQd;*VogM^T+#U7Z?S+}o{qh1vQ^)-FfSq2s zB>QLaO{vFa9V1yI+5%U)KFsS#1qp=S)B<-#&??$2)oNMZdI@ucNPA4q#@inzA^ztk z38o0f#U|X27%?Pp``=8SbLac-=^J`6eRa;K?*+s8zA!$u%#U}L9TPuD7+AWL4yotL z9O0|F(c;D$FK$5ESCUg+CR)?zJo9R>w+EARtfxAS?1t1EI+hKGDiIAm8S%kmmN7KG zstIIe#P&d%7Yq2)F3(F@vkg)gt%po~3SpHp_lFse)EO$FbYB4-1vF&+n{dv#W!f?U ztZQE|Rr}2su8h+kte@W6HJRYyk$Q2lJ{moH3_3`V$gF&98%GCb+=6uq*113@cJ%>Y zoJv<5mn$eNdAG@JUf2wCF9?5-temo~bmYO+z09xC7)>`my|3C7skQqqV@JQ@^*0wT zJM=5&&!7K03-kAVX^aU~y_kezFy0)el=9N2a3VbB7QI#12Vc4-4R$rJ$q*Z@;e&~) zPWIr>F}KZ0m7G4bglCJ~l{+<=SOeRwW%pw-?0uH~z4GwK1xw0cEdg^2< z6Zl^9v*#H{P-Dnz{7Y0-#5Ejjh_Z=JHLvn7b-k&)?_PG2UEXUR>O(6!zCyp%Q3mX{ z1|~LZ-ER)O8L;fW^X;@Y(HOZIehE<%3xSmU0@RyE&yM*>Q&KKG*c*}Gzcc%w>gz${ zW1G|Zy^hxph&G*lR3EkfZhjEBU^~~t?Xc&}x&yL$(WEQVAvh`gS@-QCZwI$U*HbF_ zZ}zhf-E#bcELM1Y7bqL#Il# zlfe_DRx7Z^6RYz!|1nOYSsu2#hxdlluLsY|oS*GrKh5Sxohz=pt3mTc+#{>F?%IEM z^!qDk*gF`G4;gH=@jDmo!m+0n1F+?jYqrIpU|6*n<0%Hn9hz|&xYv9nzx#rtNY*QQ zxJp%QOiP*2aMDNB_2aYHtRHw%PzI{4V*yaB;eCPZPP&nq&L4Nz*4O7p)g=V%8AV$Y z3d(L!Y)elMNxALQ^zvWQAF7CN4572)hWg(Q`QcIh`NPL{4>h57Z~F3i&}w%4M1ICk}8!qzz?5i{a+c4 z?_$0ZLY~3P1h@S=mm(%0$TZ!Lb5b=C8}>!7M9W0m6r~**STXYeww8Q>Bq_~Bp+dOT*hagzkI-s@%vMa| zbOV++gxO11pM}QPm@wFstBH`%yB3F=m-2|lU!2KID5=JZRnKnyOA!_Bjdhb;tJ_`V z+%B$j?)f&>(z*MOaoi*ZqsK1KH9ox#Bvb;Z>D~3{Rp(B_DvvmuRAV|DXPomjVHqEi}inSx~eFQs; zs@Ly86AF!)!hgh!C1r% zEopl|_mq9W%CnSd>mhdob9F)xo!;hH_X957dEQez8pbZMUXN7pB#mBdeBHTqZ?#{R zc&+5evjwabCU=^sDf-`XE`CQku3JRp{PFe>I>*<5-o*trtgPVs=Zv4%FNWyp!;TX!|* z{j2+1Gh%wIdzv}_k=}J7A)81-05N&H%W-k%$^w@Jx`3DX@GB-IlA7k{>FxDZ`^va8 z{JXI|{Ng`1HuB|tom$EUPE*~1%S|%ZuW4=*cLJDR+-JOR`_B8!H>nTE7@uFQr$=s( z+Gaq1oVsPWxAP0Y_#UFlsPx$*_Bd-36vHl1>LNA7QHAMiO{f5-BwJzk+in@9klV~g z(RtGfCN{&b7kAfbsORZOvdSkV-NUhron0bXS8rBt;Eb`^gE99nieIO1)C9(zdHVMM z4+GfJyjM>}V*9TRp%F^OPm=6x%ew3)VJCuCwpXrAS5~d_Zv2ll!*j_s7V#f5VZVpp zI#Za3vp%i!8vg?&zf08?H@Qc?_`zUue(xp>4Qs1ybJE*yUwsec5q}A^FGLy8jQ20T zr%k!0-tBebwfQ1&BhlJb+Xq<}ldM#xtl69_caWc>{Pcl1r4@9hjHJVZGm?4|NK3V5 zsL1F!1X@Ns+7G(z%@#*YM>0;O3m~kguYt=ZHXHt&E<)hkoxi~_c*l8I=e110O!GR) z^iS0b=SxirB_&Vu#}ZKlR42!wScp@L722?J6u=S51*{$p1Bj{imAi)O`+RnL_bqnxp+ zz??vB1PB1Yj|qCIE$^0-t(P+>l=OZWoci?IQ%vk=o2)(0#+#aAd*l0t@h+yLonsHk zegW*Xk9z!bvN)mbp~l572b7N^t{;T)?WfVNrPlMXgf|*Pg9J=>v+1T+tYYx;%9fgq zAJILKQMiBwMj6j1GfOi$QNbdnw2K*ie-R`fn4s87MM?L6?q|8(+k!~A& zsn_6;!oJamr!rdz&P_+OA&@Pk%D!vuBwxEud8R^|xVUWpxvZ$Gnj8YotM_fw6 zpv#tynV4nkMbihp^@eY>(y8a^VmQ}$&eb=5qq$*soKUz-*ROOhRGQzJ{s6u$wE83v zqtX%~5F806x1xm*;w*jV{G6Mr(k@S+rf{z8ew?E9Td5!-2Ur)dfhcH1pB6!*89_7l zi2JxhgCjl1vGJVk#zb`^YsNC^L$M=SM(V^9F@gF+l5uU^MxM0zqjfG%!1nVV6B_kJ zU!m`adCE;v7^u~&zk&psM?hpvHJs1YnJ6AA*x`@H@9@`wN7TfdDhEH(1C`}XDP-*R z77*t29&EYio!JN@gxYz~(P|M8f}r!P*JH^Jjpl*ZUzq6(OZT{iKt-NPn)n>4IvMpT zad^P9STD6s7|XP)S2&NM;Z@GR6QLYKIVJX$>v>P2Lg2E$R=-hvu)+X|v@1BLOAUQP zosdqINxQ|$XOi_Puue2F$bZu>_mTD04 z0j@X*2^e2)=M>CUC)6@=Torux6b9mYKi6bLqx!!w**W9}tQu&RE{(1{FJBudE@-FSA?qRz`#CO_@;dGY1dFq4@I#XT+9L&RShLUea2$_r9XQcw%<`v*t*BPT4UUTO1 z#kDHMaAc1l-TtnA^qn7iN-cT=kddSR6y>7Q2lSV-qidCvEJm@eHA$kUq%kfYjdk>b1T#?zHGF3*V%n7s18vt zosx7)oJLN=fq1Wmfl9%YOhjZ%W~U5=pDDc%sjyqVGoB)`pqQLS1k2Rc*r z$%1sbV|+GkOlSv4sU@e4yKeqP@Xj3Ls40G5e8AIfNh5OwUFHVbFv>aytvSln9cz^p1YwVezy5`>4H^uBq>d)LhG_-t!7< zqG_ga1F9J$+t(B3$=ejwv4T@E6*33bWfLs&%cxL)x)(lHXUaQ*t9?#~G>TG6K=HR3 zF*_!r{edp_?>AbuoWFndPNX;*CO$?b4__5AtJpevmbWEA$8_w#L(r5JP_UZK;A=pH zk}i4mk(0$n1;Wcl- zNLu9O%1l#>rDF4{$Zmh9g8#wh`P^QW=2V9J4O;M?=zXS-9C3p!S`~bCf65eu?NSN= zMUvkUobvp5%{bHbK5k3hATekKU zUWX{r1vL$3M)SC&xrsS3nP=QF|L?(()*UJ z;y442+j{odYGb-`{!A>#w-=0Pwnd@<1Uu`2fbHgYaK!91}_t&Cbd^yY8+;t-sOf|o#nSt~`@L+X9jr*1AURX~WW(^;Y%p8W zTc!=^n?}VUo%0DFb9jm9asDLXGB*Cw3sLJcv!*vEhLC7X74{~`Crw0g5TL?Hv`#;%|S)Cg6}2F6Yp zN4SsJ0H|B?ha3lrl^}1VRcu6YdHuFY{r9_@<8KKXuzbQ1HvUpban5UvN0UF_xR=kG zCoS}EiFfb+o!4#QgFO$G@N|SxGQd0^Yc+`Elobnl>RT~%*+e4Bf{Uyv)cU^M`ohna z=@)v!`2EdXzMNTtJ;r`}!5a@4xMmVeNV1EEzEt!R*Cffl<{vK12kCNrqrDaGUle#9 znC!6~s)Bx7tSHQOJ+RP9!j-v5t&UG2{Aq%5H}4s`!DO*XWU^k^AR`OJ_BB)BU`d-| zHZ9)(kQ|4Y&^x@;)3w=Q_h>_e{}d3j_FW+0(>4DO1ha7>fgM&4kxx6-fcW4G0htm3 zFX5!9bADiNNT*4dK*q0+N1LTp7Lrv^5iT6G6AF)KEOq7g@*!g($V;@#W}+s*qcM)e z&-)T$BonKS$Q@KSp4ylD`igC)eLKD)n5hv6BSEW0fF1BN;$J71R~Eq5H;lB!Zu`aw zh}$p6aiHY?n=(H~=5+n*#2FZm12?_8ilobYt7U<4{9l!W`UMD0^cVmF(_{9Xe@xN= zb5yTNsp30FWB<(4H?b?dQ>9jBXP5ne&RLyyq}n_*Q(W2k8;9g+OGo8&L`+SPkVqBz zXckvLH;0sX)&% z$1nP_gw9G&qPl#_RNaDa9mv^&p*Ak0+A4Hn=m<(n&@Vuq37%NViPttHfo_bEsbvyL zzRcIkHLYd7ZtqdFsdu}2IGKh&ykXKOG^xg$fNJH$Upp_r8KBnB4i+Ue+n4+PX6LGv zk!rMjDkn(-Q-190lu+Aw)NyV#@qba+3;B0rzP1(x+rKucm$1Au*z{K~Ka4vEpY%qn zJz10Eh2DsYq6b$tyFajY^8PXE#|jTagis&-L~9*hm2P->dzA)YkHT!4!1=z^WoYYG z=}59E++#a6sV&*8{ZiRgEArLh=qN;3VeTZW)2*>xO6IllNhSK>zWc4J4vcT8xbQ{~ zB~UaD5u31rX#YT`E|wCTQp{16>Vp^85EjM2PdAO?uc&{T<57bsIDiuN43dZ8s;-Gp zt;r_r5Tz)?G35hIyquFXq&uPGCJy;wmCy-Yn=HBr1RP^gw!h@&I)5j21g;nT9RLJ~B=ORGC88L1^LBhcgI09Gr#&%? z@1ag_>I)T@IRh{P05So~Wh7;ln>FhI>cR{rXCG>gw^XGiT8IKKfY#tIfK|U92@gEB zAqc>ax*1vchm}7E9aP z1oy~^-uXR#aQFpVDKX=iQ+2LsL#9|ZPX6d$8`(RgOgs$9D36uwLeqSgJe258Upv@= zBl~`o=w0AURd3JbX-nne%Cogw9(H4!%#jjrp{|(iewpf>fFD-} z4L9tRS1m4QG2cz=E!$zqW4!GuWlaKO3d~^SSg0r^{KNMwOA-V zH{qUkl_?aBfZEm<4;f)?D}+h#v$a(Mhz}?+>fht(=PUU*6imLJ+sMC0$R9`)Ky<+2Lp~=G#~>h@_)x43>0@s)e3MzQ z+_vgqHePm<$4o;|pc}0S@!+4}nZ#-4=|^{g9t~N8A?WdP5~=xGF`684 zgG(gLxiyL3{f|mtX$yblFKE8W#+_N-$S(ZVeEA4sv0;yWeua%#DcIms6K^QmA$bMm-|{^d#m#CLYZ!}%sOvSqwhFv8 zRB#&vg3av)$?Xv7yfk_?((;LQ|6KN6Xc6R5rP!8DcL`6160Ck)w46^j@3hD^{pxwV z&4z(?9*x?oUw z4$ZBN0WRlO>b_#bv{)D6JWUlH-K7edG}lW|`>2Z(SmI7_Ob@Ry2OOWDtZ|^kX&f=H zQNUT89+4y~d(j6YOeG}dh3$tmlx^yu=is?vjNu+apit3hQ6(1@VHh#RnCJxMXQ>i_ zGA312JP|ncyAA<2*5$@q|E#Q>_vmCo_XXq5+=DfhUrb3#4pc;yEw9nyZoglGC zcLO;)(oBKuEN}kIu!S64F_lC$G$r)=dc!{`W9LDo*s-#igG;fV*oPI_ z&gqIw@D8iE;zMz^=`ohZ5%ltQ+93hk3S6mx za%%vroarO-m1o_yl+g%8G%gN%`jFl(k+YY*6OLNLvr78~*dk}nr4~5Jmq7;1wM31q zrP4bq@Y?IS^uT=_le@z>BYpwq)Kf1-47t5~#+k`+C6I@bk~97;E|~gla5&FQ*xS0b z7r9M0oM&i$b&LYH|3?!7CK&cA&V28|qVdRGS-YIgB-aetA`RIgN&4}D?j{oxHp#0) z**6%AegSx-pjFw%`Wdp7k(|jfzL;?eYeJB-k>6L73Vgdlk5O%b4(rpw99%(7htQN; z-iDDsD4y^rn-Mh|XnjuA3Kz7F;{*6!Ycm+;cA!vb?UhNsiQ`LejtOMSl=Ghv1x&Hw z1+Fkuzns`t>>tGi!EttZ-0ZiTZa7BW>n|V8xB8Kr@eE>mu{=DrSKDmfiTV(OJhhF7 zGx@2M=T(_szDm5ccS?ZH%2PYj&eqO0;uNVqy7VqrY{`v>Ni~~O(nDw0R~r$RCGBGizU z%r{3Eqsc7hf>ARxCea-X6@|bT2Y=T*vs8?xAerYh7~f}5imzG|UxFDXAVBat%>u+> zO1eZ7$W#-JQe&g6{?h-Wh?09wkKO=j?W>J%41>Q-=_hB3$Lxx(EI1-it?d?Ug1fkZ z=gjE&B`L%@tkuvOdB@9W!dsL;dI$h^qr3|VwHA&?&~Zy{J@SCBn<4-bb9JqJOtMr*dA^}#)CuhY1_YuagU}olN=EIsrY88*qs*((hGK* z?jlr=u*90PcK9Aua-YT5UzI?md2zAC9=?UJjH(-%#ze#;vZWFobNT1CZ7^1c>$8zN z?!JTnJHg4V4eRxU0)_t+V{;<=2M!&MuKS*krIOrm44}HZ+#4u_CE{E8n<87h z7?MqL_}$As>;Q-^x>#5xgxH|_j{9=@;khpf zDCt&P&wu^@Dw=wQT~R;@KMax;V#jXxc<}UUn!pNf4mADTUU+=Xon`Jf5C(BTh$46g zv~SBdqy0$4QHaLtcYX>{bU-7vsquNUsc|7yTrmEK@pCAgM+U7I6xl;!$O#}5{ivnF z+&t*`B+J{tC*(6CHY@5-1!AVR6F)h;VSz3<-B$;{cgVK zFF=cwTW^()MZC7S!5C;L8-c6xtF?NSn#&^o_e(<*nW)P6th(A!==Tf8_^fr)3VW3! zzN+{4t7g1M76{@M{&S3mp%`vf`G|fWO-VVX%=}6Vj}T3gy*Qno!hQYPXW2KsZXQ`Z z^x409^EXIpFF<0YhK!Dd`>^OJWk2)rIEJiblem_wT?tj~XK7+C4H1hu@?Yka@8$QoRQxWKy=#jj1T8`}LM(Iz)Y-+sXIy}{ zmP8~lD19}L+&;*MIJH_U+#xuQQ;iVrqA7)#EfF>}g=6F8`NTv|ZB9Pc4V?g)tDmbMww^}6%GH#T z&m=c*MIm7jAuJ?;r?ZbTQ+y_qg+>{G^x2l;j1J@A@@;zp{DeW{*AB+ShMXZD5#m$f zoMuXpN#4Z3dSO&v*Af`q?mY%enUqIvO>?_ND+yw|`{k{OJ!Z(c5#={>O3!^}p z%ffr?KbTZf0LDaVo!u(XWz8W3h?aw@#^!?v1h}vCW%L&yyUbYY5jZE(h~|J@uF;?91Ml9vfD|J=MV_sn49!)C#(iKcB z)e1gmmKIT=1$TG9=&0U|zE_QrFy0y|1=uHMoPT8~hN_(3D0Z4^#7*btuGLcJcheUO z-|TQYGM9BYO3-@nTt^n-Q8D9hvZ%jILfvj7L=Q(wLxz17`mf;WO%da z#MYHkrE`ZmiJKjaJ8u&^;f(|?ZGI((raMepc{?wOq>}6S z%8fqbtY;KK?1-TARDF?HQbAOwEMX_!`ZMxiWoWiWJh}j{A%w42`6d;-TS=D8h=|Jn zQu2pldsbQBfR>D-DmzQwd7+(a{5>o_ysBmD6nx~tcBV?QUNYQuw%|g;ZoGn_n?NJc z{?1;)F+;itbp`_M+|Ex1VCBdwv=o-IYW!N>!=dCi%dVf-%g32#MOzbtgR;opv}`_Z z6zU^c^u0HZ2K}uO^F|z0t%SJ^+Ju~F&R`7SfeJy=6+K&Cri5qN$ntiN7GVRR)GaD} zbcq&FQle0OgU#&VZHJ%J+-vUv^#PS<&W@CM=#HLzz|?>EyRN&NL$9*5o?40kT-gXt61*r?77Xc!)4a!F#}vSRJ$u8u!S^99z5& z;<7Z>`H*e%7AzJy8wFw{F(jlY93hrfBCe;ZB$ike=99BEt)BYyMavpb?PHb*wWtW- z1PECqg#!<+@VafRT}gN2AI2bK(0yMBKk*`4%819xGO78?41^DUOgFb&{pvNE+e3~l zUsqZApy!KHVoRsVNbbS=XeeEjbezP2h>es^3{mSRNZG>q#JRKqshmJgxJrmAfGzIQ zaf(`8OcKIj@FR$Dqn~D*`pe!~Z5?S!G@g0v2mKg4HB8wGUI?P{p)jEb?m?7an3^2Q ziq^`9&qWNw4;bZo=sRsBNmd+G84?y(afcn3#)BQ!yFyk6bV(5d6%%aIe2$@zCHK~q zH0lq8y9R3if1JH_Tov2?KfFOeKtQ^Yj!kz;hp=hbG)Q;12uN*EQexBH-67o}-7O+0 zAt9k4AnG&VIrp4%&$;)0pWh#QUbAP`%&b{!ed_&*;Uuy6c>g+~;x35vgp!m?#)Xu# zO}GVtyUI`?C=eMNN{}@2VUS-Y%2JdI4{gHELFh#pJa4~Q2|1-fLIxy1fYd{K7x;Xb zAvOs39w#F5JuLLQs0hfQI|#sE5E2e9H8K^Kq&hYpjRw>-4qjU~jnBy~rKx4+8Wf+9 z+t7nT%Oh>+R^K}_OF+kK9-NoYCn2Ne9@4i#Z{gwrJC-#$+5GJbCTQXaz$f)SnJ51Q znTVupiGM?QGsN+u+nZ}7;QUTY4DdyhyoJwcpS#5;z5!={f@Fkvq-4u9A6>4ylQ%C* z+kFTf2iqq*LPRwVKNRmvroLBw#>Df`_GkdbI$HE1XY8c73!fy5_v>Z|&tTTIn$?rp z^$3hfQs0w*Xqw!G&ulWDog7eR#FV6xPtg^>Fvq(T)-#OHMXyQlyC(bDx`NAauVvizKT zdZr&sy%@K(;lrNN>4Y;8k#Zezz!*IKA7k))Pyczi40|==G?Zp@K;jV;X~{h^)eUz- zzoMmSH{;si`(i@DBVJG{wM)}tJcDX*LF%o1#xYkL!8bnu?iGI#go`n0Hw(;^V?2;+;UKO$*4j-dO{hc9d?o*f4fOdYX42 zPvJCA6!m3E1c9lo&`6r2&z;*sDgtiCbWYkn`IS@SaVJOTb;C1$Y={VS=_-O%!voeD zF~xpXKc@CR?qiNQIeJ>8HM8n>Jnv%Rs@_iH-jYgUtp|ifQXxZRWvP*Ux$?u$y zAVflD`Q&MO?Rxz_;7XHK5C9<=*dsQyO~@*j_`jBy!e)X;1|o`-Q`)5vM72`sk?i}? zns+5}>+!yAt%1K`7Ub9$RI3%>FgJ8A%{F2yTIxWhrH(uXka3oc?T~VO>)!VoACF=@g3Of^W)};M%ZX zT#MdzOoL=P?fdmZ%Y=dpeI!H${tQ>6gost9y|07LhgkH=UzZ7rV{ni1wORbtMY%lM znJoSeT)ncg({Q|p=l{^P$K2nJEEbdKK)+TbU}578r& zyq@tG%ajiQBc3&rv3H6JSE1p3#6gDk@*})Xo&XzHWc0etSMzwYM2e$PKX4o9q%+lF zR$_XGz(8@n|9QPXyf^g$pKz1)P z%?~w^w)lR6PC~NjeM}|!CQJz{jSY*?)w3ovQFDmEda8O?EX!g1?^Q*}JpHF5^Z2u_ zjV6xx1@InDN3J`N9ik1ch`;9QOgwk0e>24XJN;H*TfM&c`c2Q`qZnZjC|<8WlSG~a+aav4i|3tobbi(dV zj2>O@nQB2i$^v^jsAWg))k%8_eS}N!>BMu?)GF^+52IBgyQ!UJ=XIo*JIQ>meWkNT z+)4|Gqc@*Eo4fLi6L*~VbWUYB=3fJ!tuwaT7aeoUaQe_G|EA)zoamn?ho&IGc8FkE zFh3C@xOS5MO*&>BdMi43E+A8JSe|m&DVNp_Pf(}gUTosMR|{XZxL8wFQdLA*1hWE# z9P#NabE6m;KPC`ERA(8BIHQV-fU_f47GL_mR2Ql$sVF{$e(7J;#^$Crg@|;cdcv1G zRg{|3xcNtpH_qEn?hEXox;}6TEe^vMGy&2Ey$??206v>Y7Kq5!7^H8sLsK-D-GYWH zg^U}^1R@SDNV`{m)QgSa6WROHgQOH4X=nT%1A7I-e0;`94ZE=_cIW|ts`3BRG?Ruo zynGqZ2ngg2X9>Drqf%KH!@7$3-5Qt12a5s|S!f)E?l@$jxCnYrV?=G4y~P}1!wkjk zwJP{!$Se#;4Z5%Jbr3=7S^K6aU=jDczM5s$p)q+E_MN$v#!L2cIZ-`TyKoNbM*}U7 z=N%-a&^=||gSF~Fyh@qJDN(JxY*Ah~7Hpl$k@k-M1o<(>%1q$8@2d!XDu6WaEc(y; z@Aha6?cX!34WXMonY+Z_4cBI6kW+)%+vZfd%fPC0Rb@;rRi$EH^vpa9rN9ZH>p&Ey zMH!)1kk1PN-(@xVNY@ni22Tqw4oor}MaJH(Z_7rN)U9YUvz?gIgZub}9BRTBDNdQ< zeBdO!{oBa`dmwKt^$Gl8cP22(ih-$Qi@0I{V|vtxM&)%nK%itI&|0zRU$SJ~PvIE7*^q8(=`?yAkX-4LWq*yr*WLV5h`yaI>y;5D{eI7mzW4O$7Skk@|Im%w$9hvAr3xecy^p|2%=U<9 z@PldVYpxp(_}-iTRBp>UjSH2>!q4}6MV&|XJ&8aChS?aFI#&Zra+S44Mwr|ODZkZP zksXoqV$DX4A%waAG>fF^niONe9Ll|ef87)^Z8$F3hRC^@65_+3<)mQA;?=l^2afY!<=9`W_?~!+ zv@h`@0zTV!;hDCq)U6BypA59n2*&T8RnK6+(BG=N4(GEf8OX+i>*)2-N`(X(MGiy! za|Kr)U7`rg{8fJ2#s0IzBilAkbsqQF^q%lOR4KOS>@qrDgl?dv7Z!#Epy}gMzb)<6 z6leeO5`h$#&qHpO$U|V1ELd~BY%6TKH$N5NI$;O!by^xXPJsK5d5zk*RG53EfZy*3 zXBw@1UEV99XL2NjD}zAVY>k0w#`DlUz(+{Q3g|;1dZ1JyubEdSWHK$%*q5la_PjJ0 z&yRGW<$a@Q%#)ltezlwgbHNF7=DLV~7K$cXEO8b%*ElkxO8d5+c69q*D*C&eVIzc% zIGlOt5v*JCMC$}~wdw}{Ff708g3%C?Ix*273wpw;p*g>c2!KTlT~@I1T+iur;oT6w zC+S}5Wnpn?;o#HaI&Ihs?=lzoZW(7Iv~QhynWF* zd6!_^@)R;lTfOkG>s|jYLFw`JhXY>HTon)3GpM((H}2b;LioHs4T#2J@0QJJJq>%} zO3qm@Ey%AYR|32%Wz*W;HF;s z1cQoiWD8T7n=lOS0{Zvd%21ciHDFIf_*^`}V` z#pdH49?P@}Qlm=yYo9kO_Xf2eC)Nh8XzRz8&SS}K45b4a9=z%ul5#s60r?O(yvEP* zg#r2xT0kD4F#(*p%FnVQ7% zX#Rat*mu0sZ)W3VhAY+Fl$t}dpGVB_dX(Ob&a?ltpu^ToIjFHpsbOSuyeSt7Tm!2w zVF~0$&HuOEC~?ljv0FGap5(&Wzp#ge>MQwyQ#Z#S_1dN-NjA}kzFGif8lCp2%q_% zABoXR{zzlhTi59(?K}-=cH8G|K&LNB^$G;Z;rd^bU(ZG>DmBljX&2;`X=sQTD*zO?z`N%Latr#qQY+h3L#B9D zmZ=f2xdnq2^1MVUFa%*zsBBlsf3p2BFfpZy9vDp=kstoO%9$zoF6Z$EzLfSb-8n?N zIj!`OLNupS<&-mX`v6#~`hkt8{jGWw{cq~g8>P>39REp%0VSXtlk^shDGynR9mXb< zjaXPS%7s;6QQPEr#1IQV`<7Ud^ryIdzcfRqg5zQ`v8HP6vV*2It!Gat4*;z{5%Sm=YvF zulx+`5gNM6Zp0D0t~^8o1d+%A$pM;UOtCxEQI5mup!JE73eE02U<4YIRf0BBWU)DJ z2EdbPhk=JJyFtk+6#b=IL>eWKMc*M=!;;Q+2IEKOE|fW|zJ&>R{|XbB&hu)~4UP-R z^_zWNMfoP>+Vt`i!@1Bu{Vz*HUUL>NnypFqkwsZlCv_184^Msk;fjw@9@yPx3Z>d_ z=h@tzS3T<4TJ$PsLboT8X@d_W{53r4LoX{>U|4}X{@wY=%*L6WH=o-hUkm?>wvHGh z>6PUZ`>>xNwWtt=ykL!31@&eS^^kf99{XT()=*h5ez|zhuMxOG!P*{wqb+TSChq9O zPEb9QEBo^R;QlrMAB9sFCRZ3l$iGVDaAhyzPsz8-+PN+4ivCScKEtVG{su~0NcB_O zRKvGnxz~VOPIol;n~WGZYQj8+y?3PiK)eq5CZPAp9RAB_uul^nwY(e}PxbNG(wp(1 zv*xVjf-xXdxO3limxH~yY^dzwvJ~$4ocT?&bfpyio#0x%A~`vc92Mi9b2#mY)K{o#M^;&vw(85A8z=+7v(c;XR1z)nVXirFl2to6U zb=aE$8~zijyTS4eJWy=+As>q-$xCAu>*bR+=}*@;lnwtP0(u?rP~%Yz{QpFyhM zO*G*?%ga}P8tr!hsGVY5W3S0%Y~<%$5GSzHl{0>Vm{dElPp_3z;O-Z2JWM{-8J-rM zZ?hCC58q?eFOk0xYOm!**5Kx+ah;^mps_Q#l=vz=nf(>RK#Z>pM{cU{PNJ+#WFX0K zxCMVeuYy+vqeBNfC6s$Tjhf1bk3Zr=%(=YpiMz65_8z7dQXy3$(=ASmGV`PC#`114 zr3T9*fQdjzjzA%edH*XwSFht-xgSsL^p%X_Whka*zkH~0HeMKm)!h@FBu1hwh>{Y& zpW_!|HlQjzR{w)}bk0^mar^X#%1}X!Z**}s_=HR`c$j!p-_uLK3+MiC@SHi!uZBwCjO)180;2%?MVH1 zb>POTIP_(zEro*;`_h)R?ZHjJ0QUWx>G#XV(cg~p8vX2!GS=SeR`F37mnX$V9A->O zylsKC4LBq^s&JXVL>KD+TIZPzB5AHfmH@%WSQJ<@;F;h}FJB(PL(xrE!rh9p?N41ViExnmokrCFwWZCDcvF8~2fi#u{fhqhw&;Q6&`|G2qH z&UJR4Ej*0QMiEYAjfL)c+P(ss5j-EpI`xS{3PyZ=qbB8yY(W}5Z_Oqph5<}TI_Aa* zrl`SPF}ffR9ZQ!8&r}kjvL8{4o?l0Kzw2tiA?3t)cTUcJ7@8>EA6mS04dN81G~OCS z>b~|5NdEnlA)a$-g0~Jkyzz_{(d3y}*Ju=4(8bkH5IZNs-S_*~&D|-KFRM@A|8@>D zSYaZUipkg8^3fbSTjrZ8-EK9Bpyar*NR_QNwO#TEAT`?mIeRM_hm z^8Nv|*r##D8mId$Cnx`|PTW0?eE*(&ET{o6g;kayBE7-cUcW@hd7*URUR9s%X(IWs z{DhK#r9vk}{_Stfat(E0%Df|9?7Q3uR93QH(#xhnfuI$;K!}NRJN@2hrSeyUxjE9d*V}>E}(NBg)WAi^fR7{^0`p zDnJf6wjzx2J%Rt1*L;|WYM6d<0GzU-^Dj7s9t^tiS@r|+V6kLY$E)M~k!EYQh6>H? z$eh>xJ~B-i#msQ`(nmsEpNaY4SF)v#51e)%ZvKV>rIf z^2%-FoKOks!YnOpYGaYA3rW`Dom|6yAn$@zlsBRr%l*bZrS5t)98!JRx^=JUh3U`( zQ|RNG_=by(BwfUBSj^Mf=RVlCk=Llh0Wz> zQ;U2Z8mwElDnQ3iC}3fVJTEAKNb?re zluHStD;*jVtU4;qQ4gG|`-`SI(=snQ`8#g4o%r%+%ggv#Lz-@knHcs9?3$t4YFH6F zr&4E^L96NUFH3l2cRf!`4NTxc>SeKoRh~=|Ld-SD$N7$OGYR^Ibcf!#Ipj~~?I%nd z@(uO$KW1bqNL}7T$8||KE$8?~g^EkV`A{9BJ^6fq$8~9M*nb{%Jndvg;at zWbuwt*c@Hq{@3YQVr|`vMEiJ#k(mOT@uUSuCMzP#aJ{q2yr(hBxG`)Pn6<5;R-9r) zK%|ELq~MDSQJCt2ru-JvkCJwOyh(_Km|dZ^incDDd9ppl8A;$;rTPtxFN(mK$}kc-k!WVEczWUahN_4NI{4Hg8Y9DYOP zG=n?zDSb-@GqlG;y%^x$#dj}Zf{Ith!D84OlziEJl&HlWc#NM0$x|)ZcE)38AMI%Q zzkldQle&5EDWrHYvTTrRXH+nldp;H3Vp*GtG0JtZ_ZdZ;9%XYG)cmo~8HGGUs(W8#;B|h=jCrj5 zE8L*;Id^(mAR5x4F5vjLsr`jr#Wr2C|EQW#B0ycs0gfVsDp-mT(? zb1SSrB;Re)PQG6zAhcr#jkkeE4vS33Mk|ANWDyOupeiou2Nz>BF=R}R4d_~0rB!Ft zcA7B-$&Qa#sAmqp2QKB|7UG}tFF@~N7%M0^Jb2j$ zlts;l-^d#W#zHBfPI8l&x0<(b46G7UFC%?~zDEeJa6(=-X*O9%9k6XOGE~!(T@BHq zW}#g1y{u5Rpu4N@o#ro;Pb+%y?PUD$ikGlU=*g$vw6#Hz*uUA zSRusflQJ)QW1iB<5gN5>Pc%i$Dw*=xzbusiE7OFd5eUfPc|u$g*(@8hl2!c?qD7^7W}g2$R)CqjLz!fID{QU7Q*jx6!RCJ$ zZ2Ly#gxBNAts)j7eI;#d#b^^3bDpy@H#S4%()SppxAZ-SH^5N{v;<20>E0IhvZpzl z2>!(wE4Z8EvBiB91OjG(qqIF6@|v+PjR`rmM2u) z{g>W%6ArSI^{A9?^StiU1EfJ)2BDA}ij*U=wEf=X&1^a23;pPFl}l*gh)OU5&G!N5 z(bX;0k}BZA&^kpPZWcoH8p$`Ay%gm%;?j2GG*p3%U$QlZp0ASGHlA=bsGqq(r;J=N z{s2DW!rJKWk}M+t6;e3zTKbCbS!zU61@9T#}K6kMlDV z!r54?#u`79e7#E)3GLwIyC@R++wHIYzaRN^_RrhfHe?LA@3H9OcvaNTXi?-V8x;jC zL}+xRoRQrr`y;%K9#kS&eH>`skAk=wk2N z7afENkorsoRq7%uPB7aV6Q(S+rxxrxTY~c>RpU`5J%GeZLdD$vWlj3LdKXB%$1bNG zhErE7pH77$cV4m;y1fPuL#^;^sqBcJ7T>(~tMw=3*fZKe`kk#|*J-Bn!VV5E`wESC0+-RS+0_EpCX$lJ{LiKeo6_mbWRs?m+o@bcvz5}4R} zCKlDDT(vWdZuYx+)J=?*Vc(sM+kjD3B|VN#KXbE8G>U*5+&lc$N%zuNnHA>>sqHGW zV?)&vk*%;v;EtMupI4NUft8&hJ*rxxMfukK7rhH)t~K{8=Ah(_F}-^1>{%pYd)@UF zU>l7?J!E-^WMzAAtr?j(^g(X2t-mbMo_klVMG=gBtMN9oJ!lW z`ANs8NCeZ$@FxhzmcQf4-y_g&!M$w&N?i>?lW+6ayMf;H1;g7M6a_m%kUt#T;O1w`JvjUrkT*D0p=XFtt*~?{?6r5K(}){+ac@69a~)VaFx!!8p>=&Ve6OzI*|HE^F=V9} zFa}ZUZd@KW>YI6I-@$xomZ=LYn~oDe4B;;crmGnHH**)Y?9oTj!CE8=1I}fPMPiac z6F?AvJFv^)|9M;m_Tt#*k?~C!A}z$T$nuT10mP92x+ErnagVLJt|`5;990O}{Kj-E ze#};als;phY#x7+0qsS|b1WKm`qbZxQdgdITq@BR5ZgaCq*-aF-;1n~xJ}c5y}A$_ zPxyJT+{lO4^E(jTD3Zl2mFZus5$g^LRydXO(VpK@tNM4cnwa_(7IQN#GY8b81&Cbv57vmVhGPDSYY&T4F%h%fKjR zp1%HvrdWrPn1wVXjxq-FLWi{YM^xB(Yn%=()Qy(QUdtfD6h!~uDd4_iQ!9rHc;>X z$2o~sy_;NpmK*C6td#@^t&yx45e{%^dwvdjFNq^Q) z73IysVS9C|W3IPZ#WwCM63chnb*mN?1s3|Bjq}hwx9Eir=d_lYf1e3<1s|Ff@o0Lv ze~vW;-$u@kE%JIME;*7j3jve?(*u8xQRTVgP>pfbDCUj)@?+ai(04oUx8B(#7=qv7 zAR~ej`Eews(nhAZtUT;Ot%6D!t7&6$fvTqE!h+01BF~4hHpO?eZ3}gLbI+(3$d%JS z9rz#TyaFvV0r13gMR8%PR!vyqzP|-7s2EnM?T+CUI{`YK z`2cxj+KZ1zwo&M$jWinUg@24pF+aKujs`-1J1@73rR1tZMi;mFvJYAh5X-M>qNu;) z4`Tm_Fh>o{!^Emd$#AT%gsEfRvCFJ`HD-E$w}|m*PiDQM*b%P;kKZPl54ONyWJx+X zv>$c7lMG&uqRWdwuI#YnhZ+#c^cu@_H|;A(NkU#OOyjMrEW|=HO$o^6abUJrz*k{# zGfSfAzatIe{s=Zl3y|c3b>*b=>a_t{>y++r1p{aD7d&FcE414-_<3Xs8Zk8)!Hgv> zVT6s0ddl6jW`Z=&LQ0l%7Bn0G=yiZB7fd`aC9_E!@@~H|N6i2BZ!hJv(oN?%pMTLL zmc9aqe>)KU44$Gz{jK?*&*PDv1wb@S@Kont>aAcI-bU<>yFb!3N&*6?QV;+iV|@A+ z-NX$HsO_)cCB(=dbB}rMsQpM>(`pth@5)y=SK-Ah`<7WY-83DEh35Hp*;fO&hIHr1 zdV_JOT7mF+XlqX23zgOx$;Lgg<}AfB%S25kDGlyKJfv5FGX=ODkm86N4{RYSL;|Ae z0XwuV-ujCkU`{2jAH4*tN&W%mvmE6iAK49wye?dL>#! zeZ`aw-n6nS*Z~!o?Z)hc*FCk-mGXgl!mRXi0 zh(X5QWEbii^M$?uqp;iF0^=2VO@F?krlp+`xUv}XYT|{e=DQ||F^!h99U!JX2~h)H zGj-#f)q%cn1!10G@ks~MSC@Q>c)s!(Cbsx17>RZQ`{Hgn-cpH$)Buh3C5-JM=dRT3 zH;YfU9$E9kfCmr(v-sIBQDPEV_*i_zEE&QxhV3b`CpNC0#~(t}n3$o%DSZ=M?v8=w zb{ixw%H?~MW#>U>cJVO(mR%7CBBj}>E`&*#4M4(|jT4^B*t_H3Lk@=8X074mak60T z+bc*dF(jQv9t>jIDrkW%_w-H{P+B<48+l@M4~`Qqg5^S_3Cv}WZA)E()@)K)UZAi{oX)IxspXZ znT$xN*u_P|`L}8QBRJi+JR3?fGjdboUK#%0t`{#oAolf;SRV}DM5w<0;IKX}7|RpL z^EvADDFyK7cc*7S##u*-8SLB^sjNxkzJqOwECFjNwX1BT0ZYXWY#Dpi(`{vRmp}{O zz7BsF13c`VxMT=la|==^@`Hz=Gumlvfb&S#yTrb5zMAG(u83s?Ty}?1TKcPJ8bfAi zcg)`pOjAs1@rO3-e>yM8t&A(wPtSbo;KbmQPt>_2u!0xe5D;tb&vLM4-4gRVr;%em z$i2x^nNXq`mOYJsPJ73pl0~e-IW0BGecV$x^K0hLrngKMe(&#I`*CZ;ri#S89k}Sz zMOHrz64VAMd9nvH+m7uU9 zR$uyMuJEddXyx2`1^CeaFg}TS8fjOFAzW!aD)YrCpfP1owHKT_!B*tolC;;tSW};) zL&&7;(#!Q{ko#0LRNTA%rw27{J4$v*3ZMrNPXcP4re8+t>+V$+$YePsZ)@WAIz^qv z6LUb5x|T)C;SR<1E=Ot%T;;1n##mOpHebZ7EOnTZa%z*Lh%!Z|iw?42_z9wTTjH-O zn%N7gx7%=;aF;&PH*D6JNz^E-O5uH5z#W^Q0){Mw&2&0PEy$`%^(!XG+)OpYiUB2WO&^ zz`V+n?8ltCd@29n)Zsf)j`UJ6sjMfAG={DaARI7K#6Unw1QFgK&#PWF%5K6(tU1AM zH?wO)CL8Aiti1^`z}HWwCbgok&!;_EL+fYpobVvcwzASYU9VTgWA8t3mQZIJ_s@4b z@e^~E5fka=a0<+CqP79`luzd-6Yh7`uJAi+ukbpZC=TUX9pMguKl0!4xhg{gE8Dq& zxVM6@I3XIow9-PB2FqkXP|+)^arl~Kj+Dk8I~mJC&YBN?cp);?IZGjy6LG`oNM$=> zNqwh^jjh|Roh~e=tWd6@i>STAzci}2R$ict9yctVpg~(wOx_dXs$&#KD-pV^AK;il z6z=jHn54#flt{p&1<1mI!}TQ9d&B)lHQ)H;7PYEMd-25UN57x#N<4pB^vvoqJR!SB z1%}b5xx)#R9~zeNt-XHmxHD2aKz8O-yblw5`1AZMMz*LC=U;X(Nj+(NJssO!ZjZLE zf{{>$)kvHsx5D6W>iHI}*vg7B%e}Y8b>+tMirIx&R_|TKHT)sKmB+#q9 zpQ%~rs;H&X@7%LUWUF8+ys?z`Doy7hx8IpZALFEsl42sMA>RP{)dq#iDRW}Oejz<$ z*oFP}zLBdDmyyHcZ?E;+`_s0#*k@2AZ7p;b(I7MIOUsQO|--oGYRi#*5?tT1YXEy-yZey86+KrzNFSrNOHku8k zIDE?oXz#le2(chz3i=kw5$f9GR*WwK{c#lVkd7KHNkan&r$#a&v19SH;aNi-z_oLX zwk0U!eyqgSSeUMeIL_iF-GRQ`ECJvjsnn*lx<=avn|S#T(d|%=XvOVJ3z88f&}r^l zacf_sE>hHA&CP`7GGSee)Tc=m2da!q1H^4 z<0b3RNu@P5R_>C+#N0bV&z}~fj$OB12CmRbp;S+ba~@@V6#Q|Y>37`;pvXjh=(2(q z3M5UY&GF1ELa#|Vx3lVnk24o*hwBy#wKq4)@rX$x8xiu%QPi^RXK<3PmUF|W7U>UP zCGsQm73B+=>jIgCOxxsMFLZKWS(osZKp`Tm4H~&V_veMq^zsY*@{}=@571dEo8vXF z3uMYU@~IXuBcAluOUSjVn_@=x*`Dlho+P;qph9F5HR*G4tMal1S3CzNzAyF$$Cp~$ z1i=0w-lXJ5%}fSn=#oa044(1}VOsP6$)g@(&8z#*P7G)H)!&&4>@+|6=p%$}A6pq{<6+^os4|Zk0gg4Tcx+_QE)iE$K zh)S>BAEW$wzm@NFN}xozGTOAeXadzPQE#-0f-~B6&k$bvXhJC8k{3LmFhUn@;_<|q z+k_%|pB~asp9xv#B-$x2Vmm0>8nUWvC-SGsRk@Otdiy2fIpvoy@+Ygk@p)&Ne9yDL zgi)q^iR0qh={qtG1$F3&v8nSOern=C6KxQg*PLaDpIJcG0&-8~-0$=7i1VCIGLeN% zlVVdhsfJtl=II3W;8x$mWYb#82pJ+vtnj)SN%84cuBAXsBB z)N6{oAhSwSu}N`NeD?g3N3ilOs6+`-=6kpX{X);AJ!5Ql<5n2HBf2p}gH!|WiaK9X z@>#Q)spQ5thaOO#7W(>~Ei6-XUPtX+e7jdX&2_%?Qg81`@Iwh@Sumf+W~~vCIv4bm z81B=#ZSM3&{{%7PyWYrMwdiL)UlZm|yWf^s-$Yjdxgk+NZb%Ad9xs)d<=&&a8DNTh zTUAiepS7B>AL{0YHOP4h%Ni{k-6Rg^oS6qn^I36Ax%7{Q5o5;a!1LA@^VTPKFhiSP zk;`5hpz_MAM97V-Hj#gp;ACEtBJq0~Uz>8YX%n*(5nFJ^^Xf?gswQK}a!vgbD~{*I zUxB*0ql5sf&IbHZ5@|ic&LB+srYRQ%>B|rff zXm1&gWPWW%K&?MYJ_XS6JUrXQq*83neqiI~(;zt5)HRn`r9b6hqN1j^bVi$_MxGhP z;K)$Q$~PB7iU3bgI%Xu7WUjQ#5I8pWKwG6>DT;U6y{cinNLUZU6Y0;o=1kpt`5kXP zjKZhpAjEBAjKmv#DKA`o;iG{*HL(QX;?pR2%M38_iskkcylaJ{KE!}<(F+sR6UHtK z26sKBC09PUhnm`fn?&ZO)0cnWqyrzuNopNw6|$VEcO&QSJ#ifecs8lBxdvcDIj6FR$XxgqMf684`@}N@Q$SefjSj z$rMPYK6a$rCprSK4tm_J?p&4wk1FU3*Y_w`yonkqH*(#mY>G>SK<}m3eQssV`w;zY zA^d@r}V7ug5l`4St+Y;Z}20^Ru za^Fux6rt0qzebsC!~2WTu@Yr}NZtKTxslcafnX`Fh|~D&?X@dVdZ+5^`zWIC-d*G- zUHcsu?}2L5Mn^+sBblyx&%skPWBqT{8=MD#_yHhv{q8m33b?CLW0JyY(i4J$2^uk7 zR1e8Wlxvq=)2U#GE37zF&w}XDdh3ILC{4t7Jt22@@C7wd=~ZwHci6s!Y8sH?WAYY4 zJ$hOe;}bSV%+3RCn4EE)Hi9g%67My2OVzzCijjTNKrBK4k|8!?kQJ_TX12ukF`A-j zUFyM1WJ)U?0Na%%xhIq;Fq|D(Ro2BYxH8{08Y}C5}1ud$lCof3}Q}`b6pM1xz=xuH~W1_WRK8p zY%#jL0gQ~?%ecqm0qtT{omXUySL{hK#`7>`dRa7vgNPy%({0@OnnVGkOsprp@{0Bv z6*&m;ue2Eo7uxuZlpR86#bX!@6iSil^-#kHn+Fy%(zMlSuUhFtuM7{DK_!cp-; zd(|IY`&9KTnOhiLno4}u4)x0%gRZ{6^a2W}cibt=a;Q=z?}Oj-KeEeS`zW*lmcob{ zRglL=9F_`<`8M&rC~qe1LupZw_4Iz5&h`(kN4~WYp~)bA6$zBV*aGaa5zJh*e1ndY zr*E|IjP*_>8!afo0t0c}clX_WG?@}cHpZxt=y0L=Pc!sJ8p-##;&kb&+;YsUdfD8F zo6&-vtSew^m9KN{+dhrHG5UcVVCI-*eQcf-cYxs!{l@Sg-PpK1{5x$#Vg%N6iR6|5 z^h>u(ssPiiy)hdn!#Y^RN{)S=ezP?am!0XlHpQeWmZb)TzN&-;!BZCIGz#X5zATI% zH-s%SZn7gSuRhsO;nmX8lPW=W*C0dJ(WG0^e!Z}8&70^$O+`J&zQW_+M*LgJhhU&a z)ptX$;OLx!rxP}g)J*aar?J~&5Vw^c+<*cRHPe47C2>%-eXK++Uc;5%jSXA&Wb&a& zoft5T{k`}EU4XsGoAoPL?`wro{MIKR7ewu zdFOZE-oguzWpIHBj5$V-oyWqf^!wX{EL>b5(GhU!O9g9IcLuA5P49-1{(xty<+Pry zJ-eoduIOsz<}46!7T#Z5>!g03v?e>a8R)%_Q3=&h9=%KbmW#IbCkU$lAq+^G&U|dN z4`XYBBM>NPOJg-K+bPE@h-u=XEy2^%r_3C+4P*mzU~d&l3si)y@Kh?&TKn@<>nqV%V>^(Xv716YY^)S~>Z>eLDDHUd z;xI}|@(V3?KfTs6lfvX?cn**o=bCVhXNAOT)aaHN|ClzCjn~A zBtATpDO%`Q^RrAEwE@WepLY~*ClY$uT9pfj!k#ay>+Hk6SbNP~ZN`6_2 zX5_Bi_Mx<|(wa26ww=9|urJUHw&+xCsURRdoWuu=RNFfJ4E=)ady!_o9|5 z$^yI#c3?1S#Blj$5FbCZS7~AIT%za)F&X7dLNNUJJ#+V?geMYpP~~)kD^pl5m_Nx; zdm8($iF-HE>_g+qvNhfro@nVh)~YOd-Ng{5z0y`K+!ES_j{s#-K}#VWDy&=j6KH-_8bEe*exW4a06e>N z$1bm;y*1asK(E;oxv*}N0^+g6S3vF5A}UbhKx(0^8j;wE(r|^=G%OJP{RCsbb-zK3 z?eIG`xwBrqv!Qa#2ySC(pA0o(8B`HPS9;jUP=v?2hlIKbmsINB1nXlvdkf8{cY@^k zAdZGSW=?>^Rp1VJ4+&v#7V$wk=}NoJ(%yf_n7c5qK+eLGcCM|2_ULU0T6^2XE6L9FC)#Y6V}9Q!>Z^oVYO zBU#*_+B#}lP2Pj*6-<=@i6+VQcA$z423q*Xh;UnvtzXoD<*9;`)*H2dw2c5(uZcz_ z&O8U^V{Al7h23h0;JTEw{B}N2+)UdDIc}>Xc>-ZQwGSUW?o!0>N!;usb1Tj)jiV{T zZRB66)N>?klBQzJL!42wDJW5khUo4E=VfHZLbQ~xPoR}3C9VQs#wUF$o*KsX7C5!K zQf*Z3MhH5A1hP0b_jWz{svb7b^y1eq0fA936vRY#FCPuNO3RsWd9$?7k_E+>%qehx zcGg0tD32Jq|5E2K>ds#F1(Agq#9Ez~5*Eq4jnflXc^ z*<2%enfip%9kX6}(FgK1=mUg_79wA*Bba+7-UWi*M!kqj>&lDyQO1DX%LZS7<%ZE?vfTna_DYJiJ750Bm^X-r4=L;=};;?ph3)~OrH?$2-)^$F~|9G`*4Q%s?9LDLL9XZUvqL@?a~6w zB;hw}=u}#b&7JkU^QvfB+sjA{J2|->X23hd_!z+`2O4QY9GXv233Hdzi0bmu(pCdF zK7b5-sO%VAe?*10{FWw#bzQ%-S>`r+ocj0#Vu#x?IhgZ$hZkwRYt&VH)BAe?192xo zDZBtfRdD66{<;+28v?fY%aiA|?dL*69rf{gSrkYc!gm0?|4Dz_y;+ptN1~J6ggX&e zQh#0bq6~b3w?8uG{I{P7AiQ-p-n$8+Eb;8~d0K3)iT(4pa0ET5)vXTb`Ns9{G3E`X z{<+|Ehw@-Q@`Om=1#%`A@vzV4JvPAy++;Ylu!SQnVY%jne97>d~^z<&F41a`4wx*d<|69^N0WAzb_M6?sF^5OP#w{ z2Ql?Nx4JIp2oCsG(+!dRZp`n?aCQ{Ha*?~$_|80cjJ|pQj@)l-E3oJdieN}nuwpU; znm*4w))uXgC;6XKGJrEBFfKw{bfsW=5{fqj?kH3W;q|+vY!jmK}i*CI?1P|Gm50eOD8kB%Z&Xg&eK-}l}c@*bI(8v=^0HAX-FlV zFz+|&Pai~>MJT7?PCmj!UyD(2SIoljo5oT^x319XFN^iMy$0;mE4E1I%AHwlOB!O?<^aq?Cy4b__T^WiO@R#6334L#UB(OCVhrT`!0Pw@4>?v+-)-}Z8Nc$&^(Wa z$orl<{3yL?bswO5)`@!Xtn5~lU@h_ec6hj)X{?wGpJACzmf*%zX(+(^Sxj@VvtN-~|1)89m3dFBpc$%m&NhJP9%Q>r z12~YP#_?{l+L&$aWLi0ZGfXr#He)3{6rW^dcQ~|jIWR}JC0R5$$oO?%de(_*tfXtf$ZZ~8zA_6rK2)SgNgIm^tiQRw#)+lnC?+%Wb-pT0 zx4Mk!STW;SiI$?OS|Hm%MoVDMTCU~-+vbQ6FTet|gp&q5X(yJ(L$NUCcar-$nc>J+ zEx_zW2WfHIh`-JDq9jf)Qz!+dY~!Ok20SMJS&90;5>U07{xy*TbhgbdQfp1qX^wv+ ztg_zL?V7xS09fvSIpNX)<9z@Sv;M~>5Bi0L62-#umYbI`8Z$b4kn!fnLzy;i^k;jt zdVN16GH7DM0_|qCOeU>xnk?t-%+oRp080iOi*1^l&2bC_5<)9?ay6<;7@S$(Cg(3- zDqF)clPdU_eqn?ER!4r;@6EE}NOEFco<d2p%Y1b)`{>z7eVfh$eZ;|P7Imb0^l$7lUTZD|03tU)b4ea;JX|jULF?5R(^;wlo!MQ}NE_IiiLp7?0>jA}g)>Mmvy$gfCq* z82QZqNVT^g9Yx$lk{E0~H8+5{b7|S?-S+!WfHctG^Z&cQp}(0FVB4*8FOLpTz8_d&*T%l2BF^I`U+M8ST>g-r!O zsTY~FFn^*a)_zSigQz630~F%Gp$gjtSAA+++6yhG*-~Jk6?iLHRYG z(SP+M;G~7CaZA+i?h4SC*G8J(0+7nb_S^n{*!kk~h`1;m!5U<-e+fIxMa1q`w<838 zf(}aP-8Q($tJ!6Ht7-`1I!lCk%E+xi=)Mpks z!W=z=y{y#U`8v(%Gu~<*-&AkZ0#91umMHD%bX{*q^c%g!2?uQF>nCmc8tX#q{wk6$ zbz}pq7B1ftmOL#%*40KQ$gJhFjIWa9>ntE=s^*?=I<(0941Ca)(6rCJ*pvkUdB>1$eC3^mLpc#YVm>?HGUHdN8KX*VUP-@ z*Xkq;*OL4s^68e~zdI9)3Lp$fAh;GHO>#WwRm*KDHD_F=t9R$hF2r~U>)W|h6^SF2eF|A_kMN;Y@ii_xxNY;af0dJPH-{_5ciRMqczUg zsFWuJWmkQVr{{ixCT_YiIClYj2uU2}aolYC3fBIW*1pbnh9R-pX8>fq?i#W#;yYet zu*AzwuvpnCqb1+caQ(!2eJo8a+AOKC83u~YzU_uOWCHM#PR)JCaGPEDLdd=7?Zb6V zD?W+(Yzn#bXlcvuwU{SEM0xMD)Gfbv|CNMjSO^!nDPR7&G>|aw1GrE{Y@LzKQp?~8B2o*+5GHO89E^d+}u>?9B6Yxy%_pk844rrI(j^s zz#u^$X>0=3)ho9b|67Fz;IA#eS`~Tx?b3fG)jH{!=x`q}pNkMeJe*uKhc zMn2P^{P-?X=qV6NgmnCs!F#3;17>gCxo8u?Z&vVR0au)A3O*G8{hLk*II`^#9pQMg z6cR_4ZfLoR^p}^$+^rw|_0ZDa#n63sxMPK)6wQ7F=5nQ&CgWp><)7dUUc5?wp=rPiCfe%FH9WAR%nl}JpR0|a0ZuNL9{I@58Jg6 zmcEL{ZXF_NuHu+3ax-Cu(9WpnsJ?AaeRdxJr!lA$5CV1HlYURgQkf0I9`?Jq6(o@u zgV9J+JP-g-7v(emk1v(S!i;$ZK%rsE2&J7Wvpd)1R;M<5>8zib2q{mYfI3zQQA!`fJNSLse;iZUWtd@|VVqFe3i{W?z z8QAr??3=AIYDRtcDi-+wADmtxJ1Z8{r0%U7NR-2tGrJuue(tx?1ll6hGo7e@E56jx z)18aK)gFSdGzOj}@-&Bw7q+zmjx&K6SU^Mg=JPkbUaLSic!&v_JmnI=Il>6{@FX~RcVLJ0B0O$EFQ79W^WPV3Aq{@ zvS?pFIZaeh#mFx`k;7dOs<1Dp5muZXd9aXB5=#(izZ<0;>NRC|v>Rm#E%(3$z4V4> zQ0dqf`ANDwh)T)iY1D>b?pu8c7)`E!^*?kwK1ae8c2OGWLB@=#j!%) zcc$3MjD(-V!NO?4_zpXGQlD!J5Mtkp-V?#@x}BSo=OK^jADi54=185_#rmBBJH;iq z)@S6_hF}UJzo@_534ZgfzK4NjoP$A(5@ja0S6aZ6XK(A&@>ADXzw#uO$FZ9?J+AD) zcbGdY+jx1ZED5?fa$C>RM~bhC8Hhx7t8){+2$h$YB?n<(M`6Wn(@o9bf@~oOfW)N@ zBwY{IZ+Pap@NHZ=oUigJRSwneOyH~O;PKnfzyZ@)y-5SbVlJg*0BLl2yz3aV96xfC1 z5sVP>WTv^!59#|I8mvXHYYi=cv`D$Iy)() zQ%O>6FKeY2rlJ5ZZx;4Spt($W=0gH8tFm-;_JUg-W`I|2L5pHv`iJt(Sa@ok8Qw`; ze~gULVLjqm`D^N_nJVIB}?PQ9JXUY3FB#_LX+iMq_1)ct(=z zwyi~BCLU`=JMnBq2esWj1I(_8X`yG8@kzP88b~T0Il0E3>MJUMl@ZYUGQ?6A$bcp` z<3k6S*o8&ew%)`%DAD1rq-jx8WoWz%WF|dMNUd+Hu#&88QyevOf|qT*U{~uAO9bc+ z{_~~E&_c`&@Z7KxZ?I7=`id0S5Z8O7o~MBEA~bk<9^tD7Wl73k^xu z@770}KwE-;Gl>g)qi@I(8FCagdFr$B4*ulvC^ysB_RExumuJOVx4z+H-J+c*U`uJ% zc3M>6%QUDI^X>7Rzrzw!7x@PsN zq6n!xCT$Z`Qd0r%G-fzY)=k8dG z*H!eF{+B5K>o`tZ4(%l`rhsE!+l?kF01sy8I2J3~WB&{>@cbW2(y}`GsYky9|B0c*hr72WH%&El%a6`>GaX?WmE;S?KY{!`y@|tjGmv9b|Cig}~alj05 zF6t;+Usd!|yj%tn=UM+UYj6965BlBZ1y4Fm%Oxfz9 z+sITMuG`qo%qqg6?wX?Kmd8%sGoTt9z_C|^d$TRRZZotbLpzzl`!z3lc@>M&2_u)A zZ8^!CuXm2bR(L#lL!EkpG}utjLWebiS_I4de4z%pT&R*y^y*@Hhdk@@iF-BM)yUGT z98=qmRwZTz79HLVeh28`}RZAx$Y zD0mfmbuhPUNtzQcmmP{9WVQg``L!|bx|4>Aq5>*Y@YV)5y{4sQ<_am2`y-Eum$NiF z&Y9b#j3$vl=KFy_THr2lIlHhs#$D}|g`zm8Cd#jq-7QFa8Ch6toe66Vr%U_tdYWJ) zV1FlS14ot8ONA! zuehftzk_J9bf}PP`k3gc(#PfnqtzIyPe~D0_TfnrE|$(sJXJgZ0)71D3*cYL`Scd! zl>{9i$c!^*HtDtNgR^fo>Pm}|*Spk$Pc3>XQ?Fu%LRR^2OmND4Ex(=Xt_P6jIR{vc z5r}WH<%h8XgGt;HAjTz2Gh_U<=#CGh1#GWXe3<(*Dj63=iJ$;!aGM;eyM#4AjdxR7 zD6V>zV~FANZ7&5xl}-s*OKQ>@X&QxzR*w7RVJU!%3@8$Pnw)EG#3Y$saEY88wfu%F zLZ0VCq(~$dI0HJkTWjE5TGpgBCQ#5B2b z;`BO%A)l^7OVXmlyub0au1?4ge-t%*$Ho5K#=WjXR7tV9=ZjPzHtLVJ(7#nkw_B5s z2~1~sUuYe*IX_k~{1d(4bPwH~gP)dZAvKK%UqTyl5IRD@Jjgf#g@{(;{pjdc>?0+g z+j#4XJR!_CM@lf)UeDM2|DLbcaSZ&w5TVf$Gl_j}4FwY@UDaNa)RMO=ZX@sQ@ndic z%0VLsoc*&b4yhPMq;sp}xZ7pz!)p=-p1EDj^;+Od(b>^_N%I1DLnPsXtz#h#kW?Lh zvHh9dQzexov6<4a%8PgWKS4KwdD0~!$Z+`+zyyvEa{1y;ETk#8C0le=T77(yCsz~) zgqLPL^Y_^da6NK?+CWTw2Z;FNKA2v;Z++#m|2pjcyAtR3$M$d`IBberN9Q2wbLe~R zk;a`!>G?P|Zm`Ctp^iR7;t`xDSRPISwHI?g?ay7L5CNHp?~e3hsYqp%>iXPo1glif z{W_931KJ#B<(U*$`q7C7LE;)aC4N5hxN;}YSe2SH^f#<8@oNw?B5!YMh#AzP!~nIQ zPUFReTZwUx?pJvV9iJd8 zd4BOnXpXE}^E3 zEA_z`^^%_5kY$;$ zAFr?acRB)^ztXtYC!Xax=N*PDYpAV-Sp5Wf3iIY}vU8&7vvmw8pd)UWcyA1J(IPgr zqlkkvL*}4W!-ywYK>=tRf|;lR_{bthjzJ6)TEJ~5z%OEvhdGZ`@M?`01h`wGJpjoe zz@J5wgc8p2b@|X$XA5_{LOmRh`s_u!GCTQ}py?)dwAR{*j{7dJ(J)hPbWkgg?xmHG zdXogHHoHwTmEyVM5_~rt9_Vy4uB1L*{)RXh_rDCklc424wQhD=vZ8 z(5NMF;m|=L7X(5Rxs(U+rrJ_jm@Nz<@^)=4p0l{&n;xWO?IAp{49Mg%@{ua4QocSa z-h<1vU)0^PB_pVMsD+nwuJJ?)Bl0UXq3$&-lilmkxXje%q^0~6)u#MSwpGo)hQ^O| zF-2ItufI!vIC1(>+DE*^CZCIXcrr)TW1TzK5p@0-S1E5j4Vb^NhDw^ICA}@Sx3$O2 zmark)76-dInLJIpi)jZT1Q$vWX1i*e$RR{5p4?aSH8|A_!-HiZ5EO^58@SPidyxl9 zafXu3{E!(dtj72aTh&Ut-=YsZ?(98do0xd9@q@}Qj&A4_Iwhn$*=+1uGS38b^zpF2 zLZBb}9+_M&HIi?}8pf=lNu!8i2-vfT?7>P$x?UHy{COWAxqocRf2Of0K{`}s(W;Mw0 zk#CyfjuGxpX7HHR$Jw$>^uHvK%EaQdMZi9Mh{TT2qa+Wl(w9^^5}H?*HKL+56FSYB z>IjY-<@rHv;|>tK5|=S}*Sk8PepoT&pqitW?@@{@?2og}P25M4A{k;PJ^%N6Q=Hv* zdpUzg4vy+QvW-`);?`+)9|n8lYyF{vy?X7}K0)#&O=#?kUh^IhyQk?oc26Y`KMTMq zNR{HK2X&rf1K#GWomDB;{t6RPv9P)7SV%?egM!m)LTEoXtVc<0jy>eLL9T*88joMA zPrqF~EQQamqanj78pBOY2-weJA(NVpuB|ZCc@$(L8_$UHT1K58>7nXHRtpI46@8N> zuCy?PlRnn21C;S2S}S0pjvXB?{yEz1qS|5*8gT5=t>~SAie-N7GT=-157W735@v~o zP@xscm&14*qyyrH(DFy=MMYQL_%S*ejc0XPn1f1u}wucXs2<1W;q4y_(&n@?07jTdHet z;yj893>1S?f$O5!w5eYsb+8^&T|2mwwHuIl?*nH^mVh@ga%utdx%H9AngBa^6<;#R zTGTRBs&T#2qJj9rvW%;lKazr-hpUD=-4Kv|m5@#q6sk4r;(uIBexEU|D`Utf%<4bX z2*K~v5c8(JqZsQd;UH}mlaFvzN+}Vdu)g{Y>(l-7-r7W`wdD zr^5broCwRo(CuWDi(Tp74MlSMHfF@7L!6wTrd*YgxSS7n!Wg!*F7%bHYdsUbGyjr3 zt|MJ|<9L|<{WOvAMX3M0B0`}HunTszk{8^YXA$o6rA$LT2%m!yd{|GAHs?4_hTHW1 zQ9tzw%Z=THR~MlwaSoE>==vSsd}S)1p?&HC?v^GM#?$MY&~*SPPWbM7P%1JvyNnvN zmdMJZ`-!3+LYiwQoW;v`qrrK$GZTFH&t$)AzIbSSrfB7_t?PSeXj|<3Y_oG@0XF?( ztfo=r%&LSoZ1TF4D4X8(7FpqwKajMcN<%$=E@3dW1Mwg0a7jZ zc2x;Y2Df2UZH&AQzixn?CYjE&qamU!Cw_HWzL%L!YzPaeViu8k;i5iU0mqJdjeVy3 z3;AVzT~DO2Vs(Bcu`HfR79ZKW8T`0WuXvXm3(OVLdA>lY89-boMNv-R`G5#JKaHEE zULp`+1zk*L{Nb3Drrf(vlRuk6Q&mAqTCMUMo5F2qSYwG<#nZluPc2IsPx=Z zpt9};Pm!NJtdVwm@EO|l>-MRB2io_qTUqWaIcgWH!eV5~ouPAWkL_?^OD?Yy( z_&fp$xAB**Ru^1a;g#tv z7?QV->~1wcQXtuY+0y5{c>0Ca#@ZdeSJAU%ZoFL6Lwb*WCkU{NL35RbJH8o9htN-_ z@|vU0Zo%H8tUv@2*1JXBkeqCt@lZdN5i+6iISb1rX@HbDE$3L{^pMcVL@SG&%nna1 zNlq?{uM{)VH8a&a?$%MV8AljPD1NB2F5Ce7%neuLu8wvCOpflmb(r$|9#H5b_ZaeU z-L8xW3cjiu`?!)5=U&QW!K0rJ^@0osX12gsV-OALH{?usx-Ti+m<^y6CTw5l;_>YG zrd1j0SJ$HK8B3JPOew=^yjRlL@7rQ7%*N9AaEwG#IZwhZFA2h{HdE|`IKo{m>EDLZAD*%d?Pa>h{^RHCcQf?_!BhBDZx+}g-AAJ)4LM+Asc$R^z6*Ge6HL0T@qV9=OSqNnerEu44LeXG2I%BZ>HY#%j4UX4n@9`2~6BDZ1 zU!u75n^`@1C#c*~6`>XJyIJ_bkY@kw?Z90cxfrkqxz`e4ocGxLqDBDx|j?kt13 zE~*|}G`(=H*3SNHd#VU3Vj&L|JJW7p>#K`!Q@gKTWGp51uU+MB)yD+m$gvuyl7mqB zinOAED`K6TjHUO<8767726e|z*|^$1#5I421}D{S`sdm_xIIqYb=F%rlVGfz)ncck zaa1R)*sT;z@ESj}T8(|)ZRM;lXa}NzHSY@JjknaNx&7xI3w$#;{r+-0pY-?xI59Qg zS}B!#`Q?p9V!*)*?E{ix3@XrXn|O zX(msYQ2kXxKyXcpyJ^ksBbA`;=eIk)6IYuZVDtwwgE)LeIrsSaSka3O^P_x{&)O|9 z5o~N|zSwHTk|!^nao;74z;^YOUOF^>dttJNC8Yeag(6xH-d+HBzkjS|@EVotKB!m2 zQC5(3TcC1{KTK^rf2QEIp#QK-e*c3hL|?Pl{zKP;#E(X!dA)04Q0-fIqOA*A83GjK zV^kES;q65PiPF!MhdvX&!9`genZ{w9gjGv?;>z@y-$YE&QDwAez75X zRfM#lOnWOzw{3F^_j7#h4Z1h`t~!7|fklS&J?&$I5PYkVWq42?kS|Jx>{XPGng!)V zsae<^y7?}$CiU)tD)%u8=8|=7gQ7g^2|g8|sH6Drt$u3;G9+5(Vj=kdtXTARrqeN6 z{p3r_s-Ynnl2`wI$LF{ZPH%_LLyQGZ;4D`-JAsb4Ert3&pYl2FAqcFha4$+QWA;pR z5z!o-4<#+5u(O{5VOaSJi~+&((lX*ew6-AWH~nXFgA6IOZzX%81P{(#-ii7j4>1(z z$NE#K5m+c*8TETlB-(XwnmR|=q`2A;O-?hV*E`;V0X?%;n3%d*X+!u5PQO4)v33BY z(!7nGe}Wi?1TW7_V6K_i!y6;iUJtkxm=r9c1W&$|x_lmDC~SLO4}4SP<}KvQ?#@(!aa% z_c#TLVqfC9TkM)mI@zsSkgberNm9)jQ)Mln?RkLFfy%3M;&vPL7XJN9%U4dy!V{Td zbAvjrhD;sk=8yMytK(+c(S6X$Wr66hVKw3_dSWVjNl#2`uYA)an6yJSg+h*!fv^VI z7qti8DJm0f{e?EM5^yv`??I00I}XBO#NwUL>AY}`b9i}$>1Raoxi+j*u!cAuq@%Z1 z^DDfADksym7L%n{>Dpxv!~L2w-@o=+ZL&D&$FaXD-{3E$f_*KItD7j_kgt=(-@SF@ zU4)4wn*a%cFf`>O;>S}z2^Jx%Bqq8l{P&W*E%S0@+dj#a*L$561CdW}@7B5BFBxe#(Cb0J1gP($X}dj$OSQ@QLSVoCa$exs5j3Db>g zBIV--9;fo?GE&WS?_i{^>AnI8yo_>0+1>B!AAfUI4;A_W>Wvbi;#TdaBoz|5f2hl@ z&0pn9#ya1{qerR(yc9=a^?7^6>DXkYMhJ#+=_{dhZMU9N;Jj$E zA5#*q$k?u3738Md%W?HG5VWlfZeIMx!Y=3x8CI+1`l2WqkwVVx?auQFrw`^P7WSB3 z&!q^jjyrb6Zm81k%>t={<=0W{QnQT&QPE4j#;2Xsu)x@`_z0}r^0N!H3@oyOS!Ug9(x;Y}beJcvdR%Jap3+zHo>MCzzUk}Z6J?UzANOPWge}IVsg+&62eRT!ga{~F z;XYj?3x4Ugp1>-4*+l}k@5wIt&)dnGTzqxe#FkvsnruCk$#Mj`1hH>9_I`{ zItTp?jSL^f{e8`F;>XjGoNrd;2PL?vHQn4L{9N>Nb8RR7^oROaA~zp`oqu-`OR#Nt zHt4`>rHky#y|L+Ee~8)+LsY-|EWZReWJg0fKE9N^VRDTp@DBypX9nXp*@?z~;R#H- z4s8x8VjxG(AUD4y=7q*XB6Yro2gB(%UB>SU>U#O9Fag#>E`t$c{6(7RkKe6FwZmkE zK$xzV#u8SbkPQ{Lixvfd|H&mdwNYPaBeB_`GwM)%A-Qv{ypoqTWDdj8UUQVxxl~RE zV$N`@MZ@lT#Ec8eLya{y()EGBxQd^4!}S&!!t01r_FSO4wmdz!NTmUfpu z1=nsaH8<=;8L7(W1v|Ov+D7EGqtzK0A6^lvNkomjCSAf|7KtV&uZnW^{T;6t(9@WB z&bOlJle(fhZE`6iCCXfjSXyCeDc-w--&NCVSOeR&QWTbcG_TO9LU1*IdGfK`?qv!-F8kNRqIn65rI6WqnRoT6sx31qda`S5HnXA#r4 z^b+1qX+JAqIf+jLA+db_4WX#>m!7RUDQjW`VjT;7Gk>$qw9j)5rx^zjr@#82P+55; z&`hRU^J~M`xcOR_ceby}0I|0M&{neJb^Yn>>mVpafZ-sbj<@_EX5783mVI&D&1hH| z!g`@_`)cO>d}CH3nLS(}D58)f>u@C&Dtjt7?Ze>4YUdoLk8-Ad@@jbid{WHP&QmTV zFUQG$$)8kgaZ5BqFwU0Nu!KZ;$Rsy2J)?Y^Q>M5{)`K|jAjycwL_QW5{3dQKO$I!z z`I1G`W%#)P$4z%r{X8Zknns6sJXK2hX}wi!s8g7yD(Vt1JnUalQwA!Y17^+i6dZ_J z6QK!LjcX_uCctdT6p9VAZlWCSs!3DH@RIMFD%LJ8&lT4%=g+JxS1QE$6JYZ{Xbk2L zPG^+7v~QjUXMFwTo&}tM=ra7Wz(!lC)094+tB> zp_6tBaq-3t?I~LlQ#M$0n;bTm98x;9Va{-9%H<1F>^gE(tpds06rWDT9tsvl{Ky9oyNf}zJFH3zZNRmd#qunW)5D9 zhAsKOVxwA;w+GoDFGUTImV17CacJgKAx%63Yn>w}&r6(^pmUx!A=ah{=+0c~OBtKc zlbSY=7je2F;)-I_s5~Ss_5wVP&pQ8$uFAQ^Nj=`+aFH9<2m{@GrJ;qq`{Wd0fBUt1 zU`ri{B^&>3^ahDugTXqlyPet~rz93+(S-%+<<>uG*M-|_ef(~TodN>kzj)XvFN@MJ z-GR_eukm!z7Gaj0m&Zk#r%_Vo(&~s9R`*qCh|9aNB`iAOX|$ACJ>Cvd$fI9mhQcm% z(&+0OG%KFau=h@M151X2De)uTN*zgPQo-#~c1v_}G^opCYvX}WQ@4U{$f0+|5HF96 zlxm)+jcZqC-j~~-tI%QRxTsx?nkAP*ezT+dJVht0&y;s*8`$yJ$!;lQA!X3G8JyO! zwi&ggYp2|gM@dPNdj%Z5mu0mVG)7ws=lbIUUXsD|)22sdC0PL%m6$OXDZLb%|4SEg zyd68B`&O`{Uq)G_cIUhY`si0|+}|PzK7c`H>;mBfRBlGyFzsvbD8S48vh1rj1>5X4 z1)6LKsx+5pQir^_@3fvJ0u0{}j;ocss5L@=ubxpv6FNq@aJZaA1rI=kB}?-fTtWgA5dZ|l@k<>Y&9Kr}Sv ztM`5p*R%9-{}cO2vDB12%) zw0Z^EY%((=!{}jQCM*58&AG7lkH098!zC<}s9B?M-bdZ{oX0$6jWHPPY+CdETztPo zDQE}yAzZ@Rwm3RQw_LTcq=-AiewG}t$YGLP7_Jbj;FI)YKIo+v1lF_qZ@~AT3%8m& zC&KSpJLEF`el$=<^5Jy^`F|A_i2(Q}2=@`p`zc^A9D=bj)y29Z`O$^i5ob{joN%U? ze+q;6`q$|1EdU!9PbrX*AxZPgJHJ6G*C}$&9y$GH6LFuA&_>`qE+NHB>8Nov@{Lk> z5v)o?q#H$k`~XT3SW`LoYx}dQ$FRA-5Fx^#xQM~#)Rr(+R21fk6p)IrIaj>J-&&)7 zN-mtS@h)M-1)Iu#i`S(VH+$N-PabR7 zhz8Tr_h_+hJb|$Lj_CK)u-7l`dxQj~&JJF0Dc`VQ$h{nXvHzjzUJf-wke|yJR*br& ziD29Rl||@3vRM4jEcpMgQvRKV=l@p9?}}j?(&zlH*uS&)Ady;^Dg+H41YVJ9s`(s3HBzpE;I zVZA;`8L*5xKC~{i!$j2ayuh#-wszuYGPJ3I@Ac=G|nUU;biCFH@By#U@DgjG)z_9)B_&xtITr_SFNEk+^ zJ4q_T$7!b_14++=RWwsQtV=|vOz|J*1|wh7?%9^VM}P+(KZrBwWBKxYrb#|_by!sF z#|{j(7vhvFjxy&ItTiOG!fj05a9S(TaARaRHBl> zDJ3O2b8&gEM(X&hddrB5=Y`Fy+gLfyCmnlVA;stQpc$pDIvj|C+x!S(M>n((Om5YZ zsK-0{$b?0(_%0qQHD5`?@;?8tI^=5N^38`FBrR-X05l;i-MG*zB?UesJ z+Yvbm#vOnR=yt%E+1mEwaj&NzI~xEyJ|HJ*hW<5lQ-AqZSJn766nC1oP@N${sEayUE=)3%6~Sx#>Z(!r&{Ec<$%%K2-*wFu5C=djHPc}1V$ zIlD8@hn|6PJN5c|L0iOc_#(qw_)mGa!BXlR{F2|^*(p6_m7x2KCS|o5sv!m*`A{vf z9+`XJWpi$XX5b;~+NZg?Bpw>?Cv?P*s4M3mkKDShF|e@#Gfkq0yQu9ywzd7rMr;Dh zbQ9eV6coyMuB+8i4-(dPz4~AzP>xAifKc112mOn=T)8aq*uHGhYdWPOm(oE3={F$l zYS?p<5`rS3ZPZzWMtnNJ2c(C5hhIGk)}aoyVR}+V0uLct>IwB zA}7a>6A}%I5%Pq3M;^T$R7_8>uoCypqE}CqEb;KBX2qU#%LpCWfrp=xGZU;R$YEDN z#ERz_=zfB>AIXhf&5!u!5t?S%jme6X2WfUO+FQ+?UD|9FPi^0SQ_M*VLn8x856UXZzQjHHoJUD!L2M8|I@G44+>ie2Eeb2@_WgQeQXq$=z zWbTP6i@=-Kqg$}C^)J~xYm}|;xOvih@Kst0g~qmlAx)5KFq$h8z$~>pTA3%VShM8Y zi=B1wc_SKDWqgPyH-;|sLekG?Qlu~Z#q+Z!*|UN86rqA0ZVe^(MLIxLZZJsT6Toc8 z%#u&+zL}g-vr03u5h0J;T&ne@8<2KKj)!zBQcWoyC73^{E1|4OGNDzLBM&gOyZIi0 zc+CsWBGvcDw4(t+Fh*G4JqkW?brUx|Nt8#dWCSoH{PYhL@z5TS00*T#BPG>4V4|NO z+sJ3Oc4!LH(({=dZz`xB7Qd+CY!MA}O$cYep*Y~(r6^{7c@yGvhn5{nnrb6n6~Ymo z$vN`FfB7Z%PY@@S{p~=UcTzEL5TPx!@l7+B-9r_JQ4j)cJ+@V^-FUhMmrrxUm{Mpg z=i%Jgojja6hIye!y)_^dO6ewt5Nt1g{YtdEKFuScj8hq9E@zQo?h>qvCIxWN5M=Tu zqJy5VK`58C+bP-zz>>wjuMM1?{4`&O<4%~iThdLStzuk$YEQB_&Z~ejNM%Q4-X*T$ zD2Q!~(Y_tnTFPq{X@@KRc}SN3SQ)|=&M)YNMf;>K#eiZXoRm1t-0V1KnK%zMCcp6#qePr3 z1T%j;Gv(fXY@46BVIcan5}yA2)1Z)_10Z=45E=#=)(v!Y9863sED#8U213Um!6YVS zzRe^gET?1TNyZYEibXCc5A*7sW|b{&ps;@bnN304J6zW?ZRY6b5(ozk9S!Xs+7CZQ zvY?OyoQE1mKSAezh`cC$*@=ZM9-`5<8VZFCcK*6A>mokjjj5$`b-rT0t))_K;Cn{Ad5S+1OXdO zdWst%-Q&`NmDiszec%K8Q>QSTx4YRAXMjVb+S#=vT#2KG0)|44a?bY$C#UBgheFcvl6o zO1k~6eAE!?4QropXn0flaP@U#@a|Gxl%Lgm@xfzfG1D&pRh(QVo}5LgWO0v&3JHKk zb8X@1)u>;#$HO-d%1csbMEgR+uE_E=k=7Cq)d zR4<|=Q~cdqIX_dX_`2dZ2WNn8F)+jyBMlI(m>gIS%($9u5ywC1@AHV?m;+ybc=>J; zT36v1sf6VA-ML&Ku224IK=NZ02{Dof{-4FV#rnn0^;h%8^O8R6iJY*$`j~v^ z{Y`UjS-6P^w_6}xr_o12di0{-C4fQc@ZL~LLbI04@~JqHKm1U}lyF7d87UFSN$->T z#sp0Sg{1P9%B&rizTKoKU~`KdLyl)EaiAkI(fy0E!#h-e^o+GiFD~K|4onm zhtqeoGA~A!ZZ5w#H%v=Csgj$OZ9J%KiJG;vNyV=((*VknbsRQ+*iWF=jpQmP|c^&d08 z;LprQeKDTny#SMz2Uhy)9hcW%F<%;(z}p0sJmxYGiD)(s0ePY*Z=<#R;mw^tySnp;kp&?HG*!d{)L*E7Up z48=q04Njj&bc|gSnN<1R?$qpWH&%!o`CJc6Y3iRKruK_6=YOpfOYTSp`98>?dRCmI zDZjLoNW%GwQ!_QEJ#9YUH$vkwQ-=pd5`n3eKFR3;gNxnz z&Th1HEgfiJ*fX4$4ecb-F9DWYB7Adl=B;K41?TO#M_xO5NhV>-vr5Wo@0QYLFrriS zPtsBL)DsHyw1<*mkuoZsEbFoc%Ifzm=nD(c3}u>2(&v+e_tcV!F`w59V)BWZyg&8c zk7hrO=X2U85)skLoq#7Bw=f-pNg$<{C4XC$nZ^a;&Va7{*v;iqSA@M;pJ!cHeB;#(2GU4Z#e7Xc&poebo89e{{bHOvTsVm_GGh& zfRn`$XM4i*Ajy>|^Hs((k_UD|PM#m*l2iu1c9n_cM)EeQAAieDe`K^vNV%tH-=Ojn zn4hL&ro<(DuM=?cqxA9jc zPjv4#V4uS=fLh$#HwZMG`w{ur`V{~-UE3>p#P}^MH=&Luw4k%z_d?>K^)CI5dV4Hk z^797;{d55y;t*K^sD4xKZXyrvyTZEDviv5mcnG=g6!t) z*PpOcuiWPe(Eajm=ze|hdGH`{l8{xd(pHO_k#^gAG~yzYm(0XXX6U8iu}v6yAw?w# zCbGDNN2u{N9woc+!D-d7Zxeo_0^#{p5r-QE`i%p4$hd&9;@eIcvE|b@Vrwxbu9pE=ta?B`9za0aC9};;FM*l2 z_}dRcr19yUEFp`#*vtOQ0b{Ba?Lls|uC*w+t;(UV&#v z)l?0Gpz+|((-J>WxzR+PsamRl3^r&}67)4~7`6^_^5$JX&$tB;x_2ec#D0%Rlpn*$ zPbU^BABhnbHYM{l+jYTxOv6Nh78v?_0I3v-AfmVyYI0RyMaXT%?D{ypeX@A@^b&Jk z`FWVZ6&M`JKGSNIF^%vA(p+t7Lv}uHx$}efA*z_T!I!cHbFaCM?XBS8E`Fh}eQZE6 zZT|c>WmrLN;z-!kfCtwGOo277Xsgn<(kwq~!m#4>V2gMS1B>2m_bjuz@EODg{Nmi# z8Q1CuZO4{nMn_n9vf^ctK5SI+(&%2RHIDVWaKI<~^R8`TV~pcG8R+(pT~Fb z(-Sg5uf5zjNn*kevzpcW;|JET5v4}_1sE|cBF7*WY1ELdUWjHM@*lI8d;*qzFnm~_ z>13j%DG5x9F&$6Srne!)zDzRZclv|JYj&c&9Ri@Bg``U~D(0=&)5hS_m|RrOk0Wgc z7DB*Tp}XqXS(qKbCMsD+?&bQe0$e>x9JE?Yk!*&ID-xaxH{&9nCz)K7flj*TrHc(^ zfM~0=IUY>p_nge`(3W#T*{iH#bbo!Bm_xjrN@RHMnp7)R{t^zbX1qsF!Y}4#s_I@q zu?jtT3&m=NiCn(Rh}IzZP6Dz41TpLMWC<|u1@uPV$|>T9jiad5rflx`vUe>WeV*!N zt3K5KRbqB8*4o>oEG_9xE12!lqr4}M!$bPG5WjF?R^TfLLp7F}+9>kH!MEQDZkv)I zp%^dJE_0$!DaIRBuL3-ev-bP(Gw`6GMOw+@wRaR{@;qUvurs8vDrB9|LU=M|45VfToYAOvs|! zi+RO77bOGmZcuyendWq!Gd*JhrBK9fq2Gq5P<`)~5d9If!I$z@&`(F2_u2Iy^|Ulc z;O`hTH*rB`&L3e^6kSRo!*gKAm>0Frg?BZSBa*fdwP0TP)w5Z1AVDf?xXG=+Dr0^= zIMCsdn%)*@!y8an%+4`aE*UZ5;NUXRBYs0~?Zd))o#948omqH3b4JeY5*2|M*VqjW zL6<519S`iSv^Vir5}wOsK7-~jV@(?61=t58XyaY?3Kh=m9LQ`4cDgnCpz+yN7b(*n zPbj1^8ZvW_K4V<7+@f$n5zojNoziBBf0;N&T163a0K<=AV^J;43$4=!O0;xzui^$) zBI;}IvpMFl$F27Zo0U+#RHzQ^KosAch7?UPTDV8*-Dp*nkf8&IhK^;g{G-r{WN8ZH zUq!O{5FW>iLlSea4ka)(Tb@JUl#eru{YlKI#tEz>Y=o6Tnz|RR3?7 zs#7^1T$kh!N-z_O%xNh+%$j+JJ&9a*vq7Q)~g`_5YZ-Qu$f0-L?kpxTSsl7YaM{l?Q-}z|R8m7SdFy1TME^S7D7N zJ?fG%EZK0mRSo8i0F#)zoF31eX%I0x+_!dx)h>GUFT+`Q{#iaD`GP$b*`kC(K3a;z zp=4OWQzZnu9Q*Wz% z_L?8PK}Cf8OuUCpF0=MR-pA2;3fcGp-b$hz3J2MYzl~{~V-W(WFeN%QdRGsh;12+x zdt~}|f(Mo=hGv(G_$l7C3y9U#@0?OU2EVCjwYam|9uZniM1J#D`OR2I39a+uz zB-h@J?zx{w8=X=B5k>Kp+~AI=_Q413ZTYxvCG=9wir7N!y25$&j7NxpNRr}a6bpKo zU%2q$M8C`K9bxCo+0%fe1v8=xX%^@E8MA$LT0W~IsupLxO zuofE6trp+ClT#fzWtCp?@#t@o!8#s~R;6?z>2VS)r_9cjRKgg#q_ddu$D%r7&_45Ybllz~zQR5=$#hVTj}2OuR!T*+^!og5-maYW8nIe=vf6Z}SU13uhdi zRXW_*? zuE#rJ6*cHsWW&+j($*tEwiU~l_CwZE%fZ-h46*lKo`<)}e~um(ab>JnOf`0aLjoZD zw+%lqMFO8hQN{6TkyyfBqEdyYB3R@z8SJ~%K z#xofvxJ5|Col;Z8LyNZ?6)_b;c!N7oVOt~mr@$9UVYG=?=VbbLm@m_JEV@xG>6WC) zqbYI|31N<-7;p6`3CJiQt;13+9VjEvc*h2FRKv1Ci!y75FDM`Iy&Zh;$hCv=x_3p0 zpD!;9=NPglCJKjDAE?;`+cdS(iY_`LK5A;8$ z{jD~zg9twS+HXKQ?ctVpkS!vU;iCClGh2_LCTLFD%hmq6NA!i~fdDIyQcA;{1mws} zpF6@Q%7XO19`H+;_9F2HZl8)e9;Th%j`{4?U)O+*e(RMhSWB1Qz)UBw z>9!Jf%ZB*wGSbZ14-6ypRNY58QFc7$(c zEbGc?)mAw3x7K;4;i5bQeII(wE8e>^#8f>byTfu_*n~^w00F4n@O;2lE-QlJorE&2 zf8q>t`hp=#8o&aR#8Ah160)ka?-{a|R;5`fT-?SUdmJP`k^Ih+5LCyI><9;h{?wA! zwv>^POQM$_hvrtJmo09iu&R4v^8lmgogkYMflO%L1P@SjM3^y~x_S!gnIR$;2knH) zc8_gH#o|O0vbX`J!XaOlXI4&PO4-!DY7QRVcgSAn9`t(@K+SuQh6tQQcYNn`kUIH) z$x5m*H!L;`Et!-|8mG~k2ZalJ{X||aUOa%I+$Izb{|Qnur+g)Ws0#=?jNNOmV2@0t zy@aFrhJkT{68-vC_~H#nm=16kOhEGE>~n>8&ly_-S=;i#jV+GK7JDe#;d zbTzdFNtpir_1q!(=1Oa!ce~tB=Gn(v&0^YHnwij!x(#*BMjn~F@AOVgT|&G?-cRm4 zEg7}imEO`6G7BrPTz0YJj%3CWV&fU%o!JVnWcpk6XDZDcYay4mx~ydi9IZ23{^R@- z4Q*j-`Q7Lris{Uk10(9X=HQLXP<+(4&x2)ULBSU4J@--Q^zscJtGXV>=%)%_dhd90 zxrmo|4zGKy$OxeGnSDxB&A<7@8HVS>R+*Mor&hak_|x+b{PM>1N=c_>$Y_yh1mY0undt=12j+F1elI!u`l3qZ^izNjpN z>ui_EwJIIYR_aBp5`f`an<)Xf4j&Rgyo)X1c=}4RVJv}e358&FJ|PfqdiOrlgT|a! z*r=5ly>aiREPbrdE?P;R$NG&LUT)=VSzcbX*f}*@8JRF@35dmHGy)RZ*hM{$_9sz0 z5^+=Ko21skuKgt2Ao?k4k_Otsv|UE=Q}CU~?VZmS*&@AjUU!Q2 z%U*R@4phBf4Oq`Yl^D*0JNM?<=3#;0X9^7io2QSKnKICRCJr{xL7dxDYO&3xzBBAs z8cL53f8V|2@u{(|L?&v^YAG!t zWKB;*NqME2s?mm9V#3Z5#!3~cXcazcv;P6){3SrKc<}U8dA;tSpWMTmHqcLmoaiAg zS(Lbe=C}1!jM6fCJFW_31o&Pht=T*-C=fAkpsxBMK(^&$$J*RqP6XoNHqjS`*iCkV z>JcNx2)b^KwWCdI8G&~P1M%>b*0%@Q&xp}w9Z5F7PA}$9&!ahpThY^m?p4b{-Vte# zcLW>)5*h{)1`-w;0_<<^2qfCOcLbdTt+86LuhDR*fi z^t!~BxtHva_8jft4>vKVy6N(L)g%BV>;JmS?yZXc`;?Xg6an==lYzrHBkzoGe91QA7-wZ1rx@)k`bgN|JuUdm2$V}%kW>zps?oO- znWCA@`1LDVqj@LU8b0aqGKC-)VAzs2eZE3*csA%uFy&|jmBBTQ^f1X$C|7vQ6oK!|JkgK zrfm?J*>IPFD(FH&+uzo#?0G9rH(A$}<(97h0JuNB;9LE$|2omVw0Lmz?UOi1Jamwg zP1=sXIfQ*Hoi-Yw)$G6f0pd#v4!U~fr4Gv=+~Yz-aNIUer8c#4hfaYTPAln&SJm6@ ze?R^EL!;?u@oqSn9%E|Wv-d|QBXyhBC|o8a5i`HBy?wc&frc}K5 zQ)kW2<607Bso&y_Ev-RyG6kFAk}ty$QlT2ZnbLWe@cCrz!goc+}XC#8<`Q0 z^?`Yl-nR`x^)?BICavu`F0#39*XqCr($X|g*T@X7Rz^;OeA0vFpZ0V83Y?gcekBuC zbE80xzQAMko&CtnQ7Hu2V_paXX6@fQXSz;Be6iM`7qX)plG3m-HzzdO$K;@F1Cz=} z2K<#t&)Q<_|2gU!v$)UqeUB4a8|d+U$Mn+^TIjLhnVO|Nhq_+nk+#x$GG5V3^#G~a ze!@xW8VKg=&e0<+lQ-!y8qZH2pH%Oh6zZ2EBA zzs!?aw}I6#gnhHx`a{;LygN^G?N`1(q#8-J3zX}<+s8|s=fN#KNt>P2DuzPgQvHit z1-K9LC^)rVc-5Go1XP^sTxLD&18sFYu`Uz=Kn6?|82hBc1GL_mIQgsKS@!%`qjtNz zD{)^#;SeG+lN=GK+YVu?c?ZF@)f|zjzT6!0S-)gjHgg$dn?&~61F@;8oc?4yR;`vB z&a%?fVqNB3JhWvemc8|=;Q0)-@bCAbdY?MW3;5owK=Z>$KWKum>UYf@bFIc?YO?uD zT$rw`WcFuys8ZC@W*pJnQ}SE*VuH2Y{VypmAX(uNYf=I}++n(?tn{NB=QO0v_1SSz z_JtrSL?P|wcLaZ8U?)*(*1%t*kk}B25=bg;a4Ry~lt12f*sQNp)<2OIV<9yoCxRs> z(JBAb(Xyp9TT?FruP_T4c$S3Z^?INYv=ZcW>rSRfK|&{3`&uP0%dk@91$a}_x50)#;_&!6iH)b%Foa6UHd)6u} zZf;>#SY-@sxi`DoDpi7GL~Ql8KwmK-{e+KovFUO2-1*u^!X7IUpgH}ty*agJto}6$ zY1FmEE>}LM&$oNvv#;h*RL}?fwO9`?68?fLH(GZXCc}!&75;{`W^J*qysG}qhT^^|1IGm@ z59alp#LLrG*6`^>2KNR*49Ca#qDKPxLwrwfAU7qEYE~(gyRFrPqL$f?#n7uLsCGgI z0+Oe2)oS)(uJBDE;U8=I(zXFkG9S4w@Pei;ca8`Sqd6kVHXqD_z^oecn{iVmeIC=c zc|xA5V(%ZTL4b$peQK`8+zw&iZddMHdWQxe-9H~yXHS^0nXjAErn#q(iDot#j0ml6 zCncHtA$g!5%A!z9etfPko*0`2+n|#~p+uIv@Fci1lt8sEG zc8*~ioj)CO@@{j=>Y$Cl#0)86Wbn=e&U^W-Tj>tN zjvIpGj@rW4Og&Vv0gsm;L0b^O=3$(g8)z8uXDkrk-ny&0)Z_%_A1)FiMGquxrOGek zFs`>du#Yds?(1rcYWZi%bKb|7Xe<-j3SgqI>U%z{N7i=a8aZgiV*JdrOb?Ktla)B8 z{5;-d%IpuLnFQlxf8N855ZJeP948(tw?syZOirfS<4+P%Z7iACk#yj5(l6cPdF%X{ zS4|b4&@r;74}Pp4eBO$>DXB6O~iNCk9+=F)Pg- zU3MAYM~hJ8F0VAz0EN&&sQ+W)#hjWRP0#WJ+YRoRWgGKR=H_@_in-yq)tf_(db=}v z8GFSRcNG00X5q*fdPcFlL2~B?*3TCiI=#@qRUjV_N>>D0XC3NC{;g}tC`j2X+=>+z zGjSUUYY*fpB^4I7w6DUi-ED_F-Osgw$$Ch?fjn3ewanCEabdvM{c!)wRz>_x$BaJdYMB0Tp(0Kmrhx(HmGP->olBi``9&HueBeAi z3`S)ZX>UJnZSR$cLGPJ#RlefC&JI3mJyk^>x!EL5A8Mhs@-%h=&g`lDJ(iFPC+w^Q zOQ`_ZGJgQlBh`Y3H$ris?OdymGq$(2x4&@37rrsLCR$|{w;QKmqwPqG&hAX8P zy+>U|Ib+(~(hU4VJ{9vmf%?qXt~njf+C_f+V3Gwi38W#!FXZt%in71yP^5`oxofVU zH;&37Y!NPg%sCzwJZJfwfBXS@TcY3Jgy~0GkA4sq0u+-BtCK)}CK=t-WU--y6J37m zRC+yVJjuyARtOK`#|ri0ym?wDKQ!)_OmBN6Fp0AT(>h$LfZb~g+N~*zq)RpU^(*FG zTz&Ak%tK=G&~lv{hv?xe}%Unjb^DyldL745FZe!@FuJF(?GJ~Bs7?5Sy}zmKClMICI;K{k=PQADhN+g(XDZ|``FMGj zshKs-mG2S`o^-*TNs3ICrfrDTV`RDCpz`xA9RC6$%G_a_mDv9qLREye<~0&08Oj$O znrVG#GCMWLZ>>GTk`SpqBEgGa5p9Hrz1o>NH&pm8>IJyo%IF)+KM@0iCWlLk3|lsH zIk~peqscxpV2zxm@04SkpF59uYL0sKB`FIZph_0u#jWIe-8Z*fj0Ax@*rFcqst9bb zLwvjofusi()KPXOK~5<*kLm0slFEd@;n9obt(m#Sj-W0w+a$I6L+ zF(Zwn>{Xn_LMEIH2wI^EZ}`$_(_mx-iRNi80Zt7TY%~+C({?>7jo6ZGIL*jYe*mIz z9JO3bHlg#*v|Deza0_0^I2#4t{77|lh~frWyF`*Qz_N~!VYOx&Pd!abf|$A6Nb~Mc z`KVqok@Bw+&p#R4GIZ~CftMpe(P)t39WkwfJmqOtA`;bJaRw|^Koa&vfzDLJ*3Y=c zjgkyZKqvU`E4?6tTxtE8^(OnoY8juE7~UxuBH0*%g3R2I-tf<->RCP(*)|0&%&5GcUUqTYuUk{HtBa^7*>!1%F+oZBix zo3^jAxQjtmhu*j0`>WVV-p&pZ&p-Qo62@b!b`KZk2#1;@+M=Zlaa=O3RAG6R3u7MJ zxB=yBh%=RX^hL?hhb!96spTBL?g~yOC_Fj?_%!87FzsJq?ht*3!4Yfm$S^Gyo3p>u zL)<-;3akfI&N#Z+G25aE?rGeb(XA=bFTkX>`UU^9ale_P?li^V8oLBVXy5UC=FZL| z`0jtH_>bLIv#ni)u0PX3Ptm6M#%rm1Mpf$ zmcq&7B@x!(jJf<)0hChJPsQH^Qkw`UBR*Z$I7RiETVGFI-@LGsSZ{gVJ(XT~r9MvlUT_G=A0#6~ zpHzCJ@v46}v?|c?y1^>H4f^|E5-5WfJLjmw0R(8W02qdl_JoX#KIlHlPlx3Z@Rth` z_AdL0{sA}!+DWd)R;zUUAqfwl=C%2C13mD|*;eT(DGBo9nqU zep#^gZ&TA-Y!RE5b0^02;_!%19B4s}!OQ;0Fz$gzCHh`ml)iZ3k*F5dmR3r-xGQRW z{WXgRahWVc6w*>SHfSI5I#a+BoG9)tJDk3d4xUcLQi9;BfKE2Cu(-45@;!){ z6Yl@e&A%6)yUNf~pl^@-?J?xxKEd%~Xn*8M>wyPTELVmibT#NuJSw;26^9Z^aoQ>1 z1a9Vyvo|yA{sFjAqi!gDU|`DV3bd0YTQY#(DGXECTtSK>6Q9<0#QPjlnY~?Y;x|Z- z6#H35kYv8GnG<7r60jZ7GZF%6Nf?jBUL3 zrvp5~rn$O7axl^OX3CwYxdW_&tf-|ls*y0ste)k+G@6b^>Z0NR;JhFMiW&kXiMAJnD^W#Zk$Uw(F9uAghlbBFXBYRsAC#?EbMSi z0;{%>GMvo_??Uwuy5lJCk*&1Iv0qxcxzGB%q&OUPacZtdyNJTcoLLsKVa6Y0qlG20 z6aw;mMDDroFM=~JM+-@($a1%m^l0s&MKVwRh{0qwRZ;fsnmOEw+Jw;d?`VAr(XlF z6HLJCK-nNVsa$Pk!kv@#l3+#>7o&WsP}HX{gk-&?mNsXRpH*)Nt>B)vb`6wWe!L_xgU!CWeAWmIS?EP_> zfWNymZXRa_O6bl%XFF;t-B*6Aj(GYf*@J6If^46J%ZrM_$G!--vrG;wdcT>IaEqH4nv;DB2X0j=3@tX@?HoXzFb*uh+LE0q+n_-DjtBjE5GGIJA)W0u zYeXo8IF2d5DHO06Jb#S`!lZw9YT6fT@TsoTL{hP8{V8)YHTa;M==%`^gXM`Iq+rqg^pYMp5z8-bL<)lCGiiGT#&I?J`x zBnAwhydwx;C9-rjh}#k|rc!-Grt-B|k9PjQQQP(T8@F*m3sVERv&UOOTqk17JjaF4 zX5Z)7XI*ph&T-2taku63c|L{>1hiK?<{;URDIvSkD!|C^DMolq;qYM25h$G}bYOFz zJH2}>hH4Q%$f#U*;T2?2Cg(C$_L-uXi~ugH-jNE z{f~I-;T{eK2Drv(&beZc>CnS|E}l-<^TqqhZAS!H>HGnJT%|nObJBMc4613Uu9W=O zJS|Jg;5-$$7~({9fXrB-;%Hj`3@ic#Wbzqu56ZA+@bDsm|9z9GSocDY1>UhyhiZ71 z^KAJnTQQq`&3Qlj`A?&G$~!2m&G1T*YCGAVi}MMwuTOuCYlHxu7^uP!5WKkpIWJYy zh%t-)xll62>sglHSKkD_$HWuedn3re8mSbT*irwqum;jTaBV#>kO63Fx30wLnJrX` zgIQ@`SeFKSEbyJ?Xan<@f0oa6+x+#MKL7{ZqV=3A%QN6=SZU2JR8q^!JOsJ9xl1u+ z8m+H6olpyBoGuo0_PaZG;$9MsZjLIxQVes!j`jirC_`wu2*lhfm96tAQ-ZZ<--dzG zW*vL~*pChs^l={;I1~gF0OX1Wed`DM*bj~LlMpJ2g25#-FwQTxw&zN4YD-@KFLyN< z089Y&4`BH^QyW=_bC%Oojj|n1Z9FT=Va;w3Z^!-twD}=wNEYHBKtwT!kn!_m0%@l! zLcIrxhl#vDfQx1Qn|fK11U(7003weV1g`r(0K(|`Tx*}R+2S6D>}M1@FVc?<;Rp;T zM(PWoZ!7G#G`4gQ8!u=M`=#8a+@&2&T3K2tT3Hs_B?^9gkrP*%*3`FzjMv_dVTjulq_dfu^K3ySe zUBA_Z*M zY9G_H!Z$?cIlY$88bbcAOW8_ zZIQ?+!!EFk(%Vpwb~{Q3B1?4Ib+IdD75M*mbMjAJ`th` z)QQ2LX(oN4L%?#Zid{RK7tJiyE85%@KM$ArS69&MEGKcePR^!0aeb&d_G5o3C>^*ChKK zVL12V7rIeg2Ge`5Q0+B>dS#m|1!dbW`Ou>>EKZ=DLuAd4>(~tq@{2Kil^-ev;H)Zm z%OEU_5*7d)R?2N7uNlCg%L&RcR}M8TyUXeBSPAW@gayxB#Ct|u?hsx~*REU*-^wL) zMxuqXJxSepdgbig~C-n`;;8}IyB)m#(ZAE5J8bPlbXXX_2M zH+jDcYqt^5<$V3#cJ>q2xhuYqho3|~qMybJFyEt1y%~5k)W6afl60c1GlUw65tvg3 zO>3wqj+R@Po)(rf;#&tFx+KBay?L4Tcs}*qy6WY>GRyE|2!ch3pimOQ`P-y|m*<9W_DY5ZXIQyb%G0Nm~tObdU(}z<8ab-pvq=HoEu<1;a=J+*4BVg=>JLzRqy`V zj+biFYT*P?PAq7kAuF4IhBs{B9E!n=ppm+y24OW6NFc@GD6-ijVPanv7KT(uFcz$cQ=U>k|sD~!qd-Z`NwCm0m^~W*ecFA`YCHmG75&?%@{r;-yxvSuL)$3u}#B>Wa(ApQaNnZCGw!&ERkMDUs`*l=LvD~n1 zj=7@$bh?HwH)+6m^e$}+fQHt1I>%B&x2xZ)<5?2($o{=;e!r8e_L_F-ZL9HXp(+eV2vv{M*3`8I?yBmc<&<-4PJW?D zB4FBqLbQvm11I*64tb5%_I(SigTJ4EUcX#BRy#eau*}RS0in1bpo1zQrSvmscJd4k z@$x-?Q$V#cy9WO?R=n0@VvjfNUB^4&OSc>WT(%%3rTJ?_U=>T7(-0$fop$5JdZ*-m zC%+$4(*66=|E?aj`fuPy6PKNLMnoldH)7W%Y^LWbaqh)kp3Z$=^Ol<>-y4p1^CN#J zUHWDGhbll=0;7F7Xt*0~*GK`(2{P#gpGzJ$Q8xpuo_%u`*8N|_tKBVi6;ck_8}%yD z@$SKE5`>&dov*P_J9FV-3-|0l-#R6p-&D`3l>WCuV||`4M?>RA?ii*MMud?Gnnx9k zx;N!nZ!A6jw|vX+gDoV0X8*)N|Ea21_h=Z5$okhFgJDl>bFfLH{@jZ}!OGt*yFTRx zmz*trwbxYQW(OuCF$50g^8lpSev@CscD!FEPg^LWE%!40qT<*8efENV z1xv%4c|me%F2Duh(n=J~5jp*HxRVz!OQ3ot;#{f!eD7urSV+3D zfEU^>2&ow7r>YDI!oM~DuAL;6|GTz>(iXzISSZ=t3rhBBX2Kt&z0(_T~GNBK)C z!ELT0UwWr+CHhhm`;p|cf!oqHTYP>9f-)asq0~_(Il@h81FI+h0Jf9=0E)X0Sf(02 z;sNUsH0r`tOI`X!N5}~L2VP1403euGlynSGihHsrq%6vB45XKZ7(lo|)9jJ@5dpjt z69N_wN+MRwCRoF?@gaFjKD@rB;?wGFxhv_|D(UPJQ!DLR1B_h39GGbUX+EFHDh4K! z)2Q%8WoNMaJ}0875U}j@Y2Ov};t^Ae9ClmcaQJ}m-i0SClj7)3eI^)G@^BMAgUOuc zBjW4LQOVVF2b!*__Bv}7eecsn3x|hzhY9OzkDF4Qqh12%W|P-U4>drocvJD#LvFcp zNTppGdZ3<_v2QYE(F5jICZz4f&^z~a+xuD|S(6_x=^?K`U8i{8UEsr-_rq(S#}KY* z%x`J5bvAccj-RO8>0xHPqX=wF4~6I61WjUBL|_w$fhL6r@{mI6&VZ$0M$?1etYx{0 zt$diV$arHK4R2D2RZ)j35muM3G?sfRaw^}@ww+0L8kq1{yPWWw&3OH*-*K9E8QB=<{x4K(NA7E9|etx!hUT>a}M2LN->cz zXW6r(f(_FbrIguxWXltdO0hK6!nU>iVQ56iIL{MEInVwJcV6AFr?%)+T7{(C5zUeM zJjYUhl|F1?syw@n(=+=w?|=NU+2p(E&i!Wy=o~wFNNtNM;jQ?ezdZNy@jUAU%e0Pv z2Z2s3>`AG}_fNuVT;XeQ+&>_DRKa9~aydjtMpLyk9+Ln5t z|0~IRvVR}0d>glXxK$Io65qR>t`LpFFOhjrxvmpADOnj_w|%i$iEZ?L1247-9f+I| z;-V}70J%Ed<1T2^`-E%1O3PPb=BRR}&hd{% zr|IHcyvVNq5aBLg{}dY zYO2Jwj-g9Kt#&rqp9MYx&HIlj+-?tKmh)kUU~ix0ubL-J}INHPWvHUDpbz zpzp1{$JBN@H!rc*Eq(jpmwaLaO1bpyYu?f~P}(eFm;6ocq8FD<+o5r2hOb`~>pv(n z?y;n(zp^wwi=wJMZnOx>)$eTm0Vw10J>1{mUHqm=>MfMxX3VbQWSfMz-4q=k+{G_i zB-scGOLxl3?P(pTMW3)lk{mJ)Wx$yJMIXq>WHNw`RA>Ny#H`(Jxn*2Mk6IX^eg9D| zmf7VkRtms|OjVVog7QtkpEvT&EZ(1|o~54cQ2rOcSH4BI*a$6vR2%D+9EK$+HX})K z_lsW>x={s!;0@s}lX+GfB)$RaM^Tplf${wT;qa`=qY;8y<-h)o_Q$KVL|S`>84`@?eHAvyxgQu z^}O40ALLgmP#nIA?EAt9Za#KSzT3GdMDx3VV;+yb>f3i4lM99Wf^4tEoEuroXDTT1 z$GY~Qh+m@R^BMlvt4BO~k=;r)@m#|8O$8!H+E=&!62X{s8)Snw# zOKiyDzLxb40J(t88kK&n_?2D^G*>?W_eus(`E|gmm+5rSdBD|QC)0~%#0%aQq6bsW zr490<^BeL6Z^;$XfI>D6t?W0?;sB?fNePc%XJ~}!)=Wpd>A#7hVftuGeM2KKp-~L` z0}oI)8z8_Odfrm^i9uumZ=$df_ATo2nr~|gSw4_R&e|tl$28LtSG>cew!!_oYL_Qe zx24jLxFx0XQbruDv2r!DpR>~+p841p+?)x7r#ra2Il8I2*}4^yOp;bPVpq#@PN0t& zRA=ouPEt4BA8JqlHt~n&15RywhDYb3IDPuF#|~oe)`eK1jW20usu&bUA9k5mFqy?s z1cf@brVRK`1KxW*ej@?TCre)M3yEwv z*{bH5oSr-vDOcfY_BZsfu8f|+!0JgJucL{ZIl7pIQcZpLs=p%D>v${mj`8x|qGvbG z(wx=zpNdc~mko@f_Ye`f6A79;d5l{*d1$@}CcgZM-=sxMH6z%lCiuPlufaazMFNs{ zxKkT8Fy!Z1ECaB1u##|2ej`NB$k&5i(ig-_?I-l#3w}a+%C>ePA{YordS3bFiFj2{ zu^2>$?sW9E_J7E9y9YFXg7#yNRmSF~T>a1H z5}o0MIvJKD)5}erWMK!WBwc~l-^x=S?a>fe@v{V}f>X0cDu;;8s;`#%V79BDMJ;!2 z6J{SJK-lxefeC@2QSU}njJ1f`i#zn_ZRo?C4!A(pyS@W80Xzs}@~w>Ep1z3BxL%v` z`T*jZzq+epH9m*X*uqvYFJNQ4mY5X zX+!guQgUa?&j@H-H;dWm@_tn{7=JZ=>;j!V(wKyf!S21iKHr%Xvs6g{l@gtrlfP(i z!BsQnPzWf6_Tv@1RyKb!?qRU4dmi8U7f&@Cap8-3R~y) z-R_p@YWd*l=U;jIZg9C1Q1WG~{sBO3UJc&++FbadSt^{EKaG~VdFAQNr;<}odExsB zuR<-cB_|8lU*8+}=BEhm11`C7x~ud#SdgIT3R~W(56>&5;d>f)IC?-+IXrdm3Ije% zO(Ju)8~8ZYf3hKu$W^vr3uCyCbjR}msHCeK&{ir*jsoR&=lKa;H47tetDk5{pt|gq zQ2!TIUjfzD*0h}jCqS{F#ogUYFYYeE-5pxo-Mu))-8Hy-kroS9yg+ejp|nWvpWgev z@B03gz1Gf&o;7Emnc2@gGZVI%=5^UX7)iZBm^yyAmfco`=PuLIl6xPG(zs)hIGW?g z8KB6&8{;>gNe~I*s)gH+eeL(8n0Xs!V`5$lm!`05s@4l+Gv;0tBD>Df$ z=+89LF*y0_y&gM7@yxgB?%qLk0&gwiP>Mx`I7>3SUKc1P+j9?uHH`7#^c$AKrTi== z|Iw0r`rM&J4QO61tW8RN<|YPd1I$sFO_uWYp&^v*w#`<_FDM{&4-)%Akk@$=WBsgT z#6ZD&+JT=&7~~(}Xx$(xu20QUe0i7D4X#Ulon#S{pS->w{b&1qC(IX2Y1Nd$$F1WC zIAQyO2)E1g9S{5{7+StRXgZ?MCQAnx-D9Wm75~C!bJi$jW+@v*Ir$kVt#1rNDyj}e z9wGtk&S6u8mvSf2(aRi=vyv?dyuUm)@}`z{g`VcJB!f?QQS>At4P_)Oy*^`bZoVnrcX^!>*0N{T8{N^Lf@Zo3M8&D(>w)h<0j((}| zO0=#3``hsWJ#LWAuTG*Qtr(V~qeM{UsXxAJLS-PtaE{#FY z9k%D5K3h72cNAGrf^O6ig-<#h;KC(d^{Pt&I}<7IvpYwgb^;WHGWj}jqkV6}`PqN&1XF zF|Z3}S@pT3t)q3C|DlHex$iU1)fMms+NH}DBGrW zZYOb_?nTX6yZUE2LgT02pRUdL^%_e@Wiu8DDBKvNM<(Lj&@ujI{eXFq6G zgQ}ZSik@F)e@GDrQyKEWj|NdhiGALNTzLgeX%2`Xlb zPPrJ%%7!egSrG2~mh^QtAx1U}ZMX)^AnkGqf8w-CwxAp}gdHXK**Q+$9DH7ft z1qOtHD*6GV@FUh!@Oz7QF0c2EK-C1v$Hh7JBU4R?EAlmxH?cL@y!j~FT2mBn>1d<{ zjKaJ|GVTo!KJ@_AFXD+cUm!Z6bnLB%SRt+ONp591S*z`GM-`2-jm$lm3My>o>lko-Ra*YU4Y^{w$lV6J(MC znGhQDum9L>9Ll9Z@a^GmMvP>ikg!9_V%Fbfy$a@u`;OUL!##c|l_~i-)r8Lum{zHK zY8d&L%SCM#!F>80L6Z}MCWHbcGhn_$Z8GkOD0C)4;&pqlH^*AIi*bN?9{ zT)H`EV<9+h#;p2-#v`7sBMo)M63kg6owo1h1~tlq!m}lf#sYkQH?QGp{uG-Wh`do> zMvUi!D}CrYx-tAAjhRK8&W51b5CKM~pcPa* zMr`5ov{Ky~3y2?bI-;80gfnb(-+p>g8xgh*m^G_sE!;MjSHAthhvMR7<%^xtOQKOj zxRe<1>NRU1I;F#69#=*7+s}S}wV{zs81%X(Af#&FOe%VWSH1`+Mw0k)=`~}vJ!RS7 zME$~wN51DhCsGt z?(%j&%za=E{Ook5_EKq}j5nna799o%J@uQBtno39;NrDPCIc*cX0BFR-mS1?NP<*s zYKJ0?IlkAyu`I4KV-u?QV>nlAY=J2MRy35s$EA8#)VBs-_f|5Sx}S`NI6ExtkwFMu z(z#)_Tx%a!T>6v#2l0xbpRMjgzz?ED*9x zf4^IpQkcF>-+NtK;44S?nkOajPf%{NDHsH1f$^m_?qtMk-1(WO>Zl%CLU* z-q#Jx_Wv?l3|pV+e8(o}0zC%U01H6_|AHNviOs?DLpZ@ZI?ax>_lul**pqib3g z;UzhCZAKo&wRsmF#Ek%qn7~~u-B{ena$|Pe!gu{ulwGus!AlS)cJ(?%XgIn3MtAU9 zoRX6&KW>#*0-=xgorXb142%qN0-2<=b_ERh}F+cQoP38@= z5+3yZvcPIE_?_gI2A;&$eE4nFGj)XtV+&V~$~?>Qa)bE-u|iXWjA#RA>+z|1l17`P z!+o+yI2mr6YPqX^WTIrfAu`#}5Ftq+nomB=&4AY-yl`{$KRY40-;9lJEUPb2+Klr( z8X}Nhhfj}EAwTs>ZgtoBD{fMGU3Ix!cV zU>iPUOiST{LXkw%XxMTx@a=tntQjj)YcLznudw`HH*2{N0o|?POdDUJ*`f6(GNzs4 zHVs}Qb>9$F-KLGAE(XZmc=wOPtr-eL?8|sAy99O|qT-&Qz4JszF+NOPFB-v1yML$a zv*P=^yWnQQAVEY62-UAGy|S>C{8=VQ;SB6f(|ZC+8)VMf&?qYO-KzJ!`5O?75Ktyn zPzJSEa~K2I2h%U{KgcCj*su57NKJWsldb^9tlW@Z7yQFP4c7tzl)V+Th~b)%YaIY< zFWwTH#PW$XUQU|V2Wp)hr7j#mC@LURki44x&Na@>gaEWGs3@DtekmcEW$_&qz>H*R zL>YAUypR_}4c6MlXlOb_n=&9!J&%rutkKj;l;h|c#F8qPwNM+p?&K_69wEu`E+taH7)l1;DTc+we z^e|5re0%IO^Bf>(8ogTbj5j)UkyrRPV2?!o1K=7D(Ur-msT|4_c2*SXvra4%71^-S zf2zS0Y2n~wbda?CeET3>eQcRj?Pii-^zQ2A;7(Q8)?r}z+tRDEi2wO0O`}s@54yF5 zNTllC>jWC=DxK1sT@-4ATM7cgrc?EJqKUHTdu}u?I3?|ZC-j+7N@rR_JsO_+=D(Wj zk?;lF1`bvR&@ZjL>Wk)4mPu6475>MhWiUOoM8qA{=d&Xz7gp?QQ4-W0_tTl z^I1Y!x-ji@ltzX1Cg;OHIHTgXGtl;Tq_q_P=tS~B<|r{p$Y~u{7~_DQAH`r&&ibt2}hLPrxCGDCG9mRNVhnme;nj$pU$ z;5K3hpkd&{7#%e%nHxKTQd0cZe%=@SJLRF(jeLpvAt+>L^<~@pwfI-Wgs+Oq)9E+x zrCfSTK!(=3xwNh2+ZE#PzQg{RZeH1AoA4Aq4CslO{rlR#6S|@fQTlT{btzt7RN}H!De_{VrO;{O zuEI0H@fottJ^R;1Mg}1rJDD5m@yKM|%i=;6llu{!VIdW zd}OWST!z#EDC`9@*CBT&U_oWk_f&P_gj9Ng-x_oAI&+l+2jQ*J;@C~n4{!8PqThp- z@4tlX<_x&ehQ6%ocGQ5YVjtDcPAoh3uy;G!?&iWl5~yDi*%>iC;dgA)-n7GO)C5(M zy3}mFb0Fqwk>KZ7I9Fssb93gK)K=KXQfoo$h>-F3|C&Lzsjay~(O*thF;n!N*P*$Q zPZ6Fcv8$fCpVbyAcY9n@ z-EqF{0;T(>Uoc4#mAZcc);h0kTw1lD(K%Qqer@FED!;Op_!=FTWKb~rS9pR_JAS%C zI>9E!6U$LEb4KQeR~0E>>1`^T096V(XMVKU&Q|pes>C**^S?wS1Oi`VduY}P4*a=Q zNk@Kesnc~h2F&~oKp*i=R^kxtavV2IJR@2S&_cyNJ*~ZLgc@O_odd`z$FqHL?42_r ziAsVl?wL$a9pGqFB_kZJH4)`p8BVyg+aJva)scF~v_mPAb{9^)U~`=zJ? zvldtIg~Nv)XtDZFMp69lg^(oJpt=A^pBqa#cvLyd_;FGITXTWLsots%|8Ic8G0iY8 zaihz5>?haSo;nR^-MGOD#%G`FH$vx=U)3gwhjy>!1d6G$9#$+Eiy8bKK@OB=bRAZg zf9>Uj)1seBQM!6)7}B_SW2iry&C@WOwA2YT+oCe_45QZ1$P${4Mf50(q35Cb_Ttz$ z3)T5#Uo9Xtpq)=#%=vo}-ZPd6fUeQB%XD+H6CipS+McJ^|5pZ#FK~tZa0U#wQk*+} zlM)E;q$2F!NA0|#tCSnS`yw(*qn-S2xybg*)6YT;JHlag?3e&;3Tn^r`lIDe6aGbl zN|e-EESwQNJavkM^kpt3t#bkL>#v~X@6z<_+To=Q2SZ)C80r(vL#1&6I%xBe>0Yas zPb3X3Frzs~O!%P|YrW?|aDy*B{{!*o_*bpKUm*<^kPM2HnTx`Y_H_!Zq|0$sLB0TJ28bvXuUR1aSS>5AM}`G5m9MMVv@SYRuQ}-K^Jjk}<}P zVirOg;zb#Vh|hQvmeO8Vh&x7>>lOkK3ej>UMeZ^`*ROxw^UUjdR6hjv9d<;Wyp zfH=^y2{t=lZb}2n^_8_8(miU=Z;_Zt;i9&oPgN_;@ym%7 z&cUmpy~vbfw%r4x*K_J2hEIY)ZrtMuMC^tP_?=wCx$sY2d+*-Krt28|Vlr@4t3F=*Mx3J9Q6Af|F3wEh2`!EtF!Lf~psnWB6 zmEh_;Ty)z_KCwggW?tcoWGw0Ha(~vBxw2&}C)0@kW8%$n9o{n7ndC$q(4lb`;8-9| zLcbn-e80fw-y`ed!_5dQRRDyIN#~RD9V%$MxC~Re|S@Rir>M zpcDW8+W`RR*cgUqdQNsIC^j~_wu{&iX5x&`{y0ExKOx(_@|4=n?LZ&?IUD0)Bj}YU zj}#{Nm`UEPnNp)#iV_(cNlLlM++@y*azZld6X^0|IhDU;7&BaW-%i{2Zb--3 zvUq#ejymMWZxx_rw%)c*BPEJUauZz$9=lqLRE=Gax_@dsx_ya#h?3h-t(=otB9|10 zTgVO8>C+5R|;wyvv%}hDE^^l%MeaP+)}sw0nj}6SeU{uRsNY+1r$J-GgNwk@;)g z=zVWCIo?ua|nfvnx ztt`AAMX4YepcT&fy`B(tEr4o#f|WP8(}Y?~QI$>yjA|LXzS#>u_nfq+9Y3zlQcKg&t=v%N5k+Tv z`ks=MmG;m`I&L}`}eBv)O6Zl{k6+knSEw~unj^>28J!< zoqBXn>eIyz1Y7%kYvpwn@)u+>e-gSjo^1Kp{0-1Q6m$iz5I9t6>!sAk8uh4x*}aVv=kc?MBGjshmk%Cq zuf_U$0|sox$O<<9XBZ^B>+gz#4)f5^-M}n?kJxnYCFmhRURHN|ZA^1X8tf%e0K+w?bJ>l;eQrOWcf2tmK=rjE-zck%P)P zBH}ti@92@J`CS7Zh2!=yyUP4Ye^>(Put$CcUpzHFJ?*D9uEx@jkg-`KR_)ZJWzm-U z5jq1Ei5-)=2!aS;^uzthu8*IIzm1nn(1h8dF`m9Mgf9H(9ty|RaU z&f}k@w3X1k&IL*iO7L%RYhwNn(<7Q|#GcRg_^X@He;$+eYIO5k{5bWPspWNQtD5jh zzdg~TZn-O_pn{)QT}*yrSGhZC58|FzrOPy$#n|xVoNFy@FAg2a8&h`$uGpc0!y-uNPVB zmXX7$!CjW8R%p52%;*?JiXKb{>&eZtv@yO?0 zPcBTpK12SOmt5XOs>qV+Tcu|=g(T`7G!p(Jo`L(_!%st>mfyz$bnKB>CkbHLenF9t3Vw-D zL8PQP%6#aLE^7kbE$OGh&#^*v92>DnUiy*xJOHAkv)4DJ3un^2$NjoMtwKjaLpLd5 zlhOF*%8nKOvb?~D&+vrUlvR#H(dJ|3Dw_fY2^fSniWsB!@m)fD6gOiFDxJ4$b}|L} z6Aq3@9Y2Tmc0J7=w?_M46+*i^G^Yb!G9SC==!^}#Mkwf+z0mo#RuaehmxZoca zw3LzIS}2~?0=verC{OWyk;o06gq6D-Gd-ED3V#gMuHAw)e)F+Fq!ow!(B0@6PyoG> zgQhRCyu84_6mW~q_-d_>F#ed=`#G3QH{XB$dJ4P>>JTp~xwHHC==W=!B8v~nrRT*E zOyRAvQv^r+53`(d)H^cZ*!zFf@JFoq{}Rp-ul-Qz$24JX+I=!tr3_<6&`T{Q5lDhZ zSSYI@V7euv#%9~hd`RjIg6K}Y>97n^4m#9XoG#H+-D~clCL5(?>CoFT;)^SeZe9SX z48e4;qm5+rCxmDv7iEhx#hbh1$^^lK9E!QVruGhFUjFPJwH@s1*8BFo^{?6DG40Tl zP_o%Z%p8ZBE>4HMgT4Q%f!6o1e@8tlPyF)-iG5vf4xviHeT&N4=0(O_d9E{Mw{#Fl}M}x=2`;*tT zPK@}2c7!a$MQbJfzz-IosS>pIDK!6$BuNVchxQN~LpEKH;V}^)LT%_K(l~K`dqhVz zR^*mIlGv5Nl#FC{sF*6;sMCMv(C+2>wK^@N%z&YO)K4m5;SmS?HtWdBJ9FMlF>b86 zlbV}_9u5wR6pSn~#ZF%fKX9y!8qKZv{qZ-V*JU-aYwpKiaU|u#M6>HP{q{s)QhUl} znn{u}kHyz)sNd;wazwAvl@1p0+B7%pfk2Ca$2^{`U$Lx6Tz(!VU=z$e;dKZ0b7B!(X?yJV_v5_W5S&zZ9ZBA#$2kHq=HJb81jcG4@)zPU{s{ zbLiMu2Rg#MqwkJ73_ial@M>pVj=`cl&b9U0mKEJ$r^b#HnH7d2cQIfOO@*VLLMDNQGGfTW!`w z2-zewH|SyktN@;J2SH)XQ|m_~RX#R(c=X`*ST5H&?SZIAmwEv0>*#o-eAw{x_VjHC z%XHDN{KuF0*f)o8L#GZP<+WirKQ?gcQGHZEe8)&Dq`GfgtSLfIMZt03W1T=*b(l1% zo0t78a(8Ol{ve(cVk0JzKk%3LQ>1QXrjE|f=60)@Jmku7b1X8A7QOgsoXdKm%worO zG_Q;?l6=um=C@*mWtrAm7M>Mx|C3uP!SEZanAEc`2tICOR_ z>yPMIp@b%?1{v8XO8ko^<1gdnZknadCm@~!Fm0V3X>TTCd;yx5>0O4)wAEewQ@>)3 zX>Uk$G(5>Cda4}fIf~?{?G2oMonPi?boA67gWZV2&_B5qiw>_^FjlYFOmYDDxNLgX zay941vZLb#%I(*?Nt);E##jhRPZRc>I(~X4K73z(TD)1yS|F= zYDF1e7fN=BOf*Z*n(3awnsWJo13h$D(BFVD;z_UT7hh!-NIt%AAY&ZKpIuJlbCSF) zM8DFH${YWdqm!b8T(;KgSFj`9B0CG~zouW@Bt-WHf0N1dl3wpJoqP4_KVb9A?&fa= zfeSeZ(=vowJ0V$tFf9>)xDV{O2tt`uk)blJ5*OhycdBfSgQ}RSMK54?5S_T$KU2@^ zVL0^E#`jn{4F&oH_`#4U``L@be};%0r`Go}4MhXBZX}Bh&yFHAO4!hcrtSw#DA3>4 zNgTm;le5%@RAe{D6(`Qa)cwC@on&(+{y2JQ5t!4-{=9xqyWP@r@mn)+scLADQ>-b{ zYcgBMJ|GcD_0Rg5$wg=@^^hB2Ks++8B(k77r2v7k4Bj<{iY9yoU%+=Y{|PmDVEq-! zdu*<+D#dr5%QyU+$p$1_a@QSI-M_>9G$fG;9JZJNwghf-uQd8%sY6ecK$)uDCp{Fl z!-q?%{40M0xX&aStyKA!f@AxzZ=L)MyZfrlIBaPF5LJL<9b|gN+WqR(Ld2~N5=xUVKT-vUY(OIdK z(jjl7=r|bKvJFCxhiEiD^lo3Tr9nq0I>+t&R|)eX?U(mky{Jq@0Y?S8jK&uI|LL z{FWt4mUeY2tJ~ukp(q`MHko`F@({ISVbM5vi{Tt zOEZXCX!wmG?N%mlVm%u^G|q__)(n7wLU+q`07Q+%q{F0R6PYgpwtxT$4MP;*dsR1u zTfu6rX)o_}{4$B3r_jLsVGdR>9Z|2c&b`VjIBy16l$ij|tP*iDcV`poB8?2-Sww0; z8P=cv{7zd+On6rJ%0-0y>oV2Q8*-~Gc%9sIGqMwE=}OlEW6p@W#P?dtrVG;?OJLk0{rU35tlb=H9d!OJ$0)j9n8Ujc?@WQSNZPym`z}iF6f+ zk{JcG;x1{ZHw^Vq=dMK(7O-_ztd&fdeL3#*$LaisP)~&c{{!%{ApuzVfwe7!fBYm1 zKvJ$KLQ~N2c}VbOe&+6JHlZA*6td$T(alozU|~ybaWfxM#)DI-zaf0f@J{a<4Y*mW z>nT^=I7Vp6`D$?u9@)Clywr2XUi!_P=rJ@D05HcvT~c2h#3A|8cp|VOcGTe7;tNux z9iDHBT`^sVsts7rdlo|;d3YOSP{UV;)WcUhyY!ID-?LF}dVq}sowlLu9DT7|jUMNt ztnMO0b@&w4$e42oa~xWS0uu0GU}!$5$l~4pYQ!s6`|%jiz?UaU#Q)#GBqn+t z4*61? zSFisDDE%V_<{(Z8)0Wf1xyBg?ZclyM=FbWdpjMxVYj?6@>y5bT^eO+7Ef!d%CzN`& zr%wXZnn$g}Q(FEb4rE69KZHV6U(yWBVw9$K*3ySJ-kDiwg6vA>D(p6seZ%~;-hkgN zL(Z|2541l7ERCfmiXUpNj3NV4`s`41&-W2!qR;xCUl8bfdPaURxW`9cxbG97%T;C7 zVzIAJd_VyU+zpjM5B2dA5Vwx4GrQ<}g8?foL(8)E0Qt(;hVb9bKe!~+kIYZ=O))o^ zIZ}umk@J5TC~o&g948@_8ni2hXSz2IynE2B)p~7qOaFpr#t|OYS`VZsGY)TGBgW=) zc*jerC7>!iZWPc5_KdPL(nQVi4)O@}F&0F|g^}TWmWXAPU-&0ICv5)%`4oBO_I3Di zK>0w7W%3yesDIXrtyfR%O!JnVL!Dl zgEWR>P#uSM`5(yD(l{1-&y3^g-~>CHkF)xoG+1KM44oR)*UXgGTD1=`u zyy#F`7qKKoUy|B-$zIApO=v?EK=(I*96h0O@k9Ap1#6w`acJ%tS+9M=n%YLdZ)4Y@ zg7}0(PI$hx=!D^Yy^TkA(+i{y>$A74r8?#P?3TrPggE20bv6Afit zM?8Qa!3h1gowFchbX+ELv&4RaX|J~iT;K^9vE;839j)*M{5KkaU8aKIU;bx}O_|x# zzfy98ZK4Akzh&2>)%P?%X1RultI*UrxKO@?>G3RP#7d4FNt}{bl9auI#aWA@PXl(1 zVEsa|1D%4qK3({+2UnI~s~8Ps9$5I_fMXX&ous8}Dx$t!&^sm&!jl>p$$Lf0n#VrK z+u)AA>?E_B0NG!)=I9{-AeL8x0DdgIcD!E0duT2(P~RPX3$wFWPDsR-=aVv9QWAhWXBW*RlWnR_R}= z{acOrG!_v!>us4-Oqxs-h~z_qN>JZ8SX^2DsFoUx^Pp@$A>tZl`Qr-@_aqyj)KJ@I%oFGbo0r{hGpc@l8^hxGzW z7x2Us5JW84s~AoM{!9k8pybdHPJN4!4+{Hcx zeS&kpY8n6n`0+|#pNlJKlYMAzyUb`so;meq_HY_)b5~_F2|_{eL(9I1cBd%l7hn{4 z#>wTAIgZ)F}E^tc?lgaKKw2b zM?!!Ye=!UZh0U|Y*A?l6KC1_&y(xx4CN1fjUalJnM$2veoMw`~J$mTFGa=i|vCed} z1n!?#zACy*%Nruvwq!|leYas5$4i2MHLBeQF2ESrQGDL!-X_#DyV{5FUZp?_{M%%K z=oc4UfrlPPjuLQSS#^$l*R|gB=SeQ4R8~6;1P)>0PXoTc0oPIg$dCXaNyJbmWYbWj zqQGh!Cv6X_g(W^B93dCAYlduA7&40ax?CO`|2Xn}fzv8t`!(kex#%!IO#v#Zn6WE? zx{%muK>KrcwPoXf(CHx4aU3B}4hi0Rg8GX@e(_b;u@PBPy&i);&a)8ko6O4ZrX(uS zNSX_OCHe&hU&(|CM|p@-e~NTWx?WqzNCH?G;yui=7_TP`v?O5*y`ZItbX?Ok=8N>u zN|52X+O`TMwNED5P>Y(~6vmJ;9UeW>Q0ohms@k@%+hi=c$(;|ee8T^R z>Su$KS`jMPrWepfGHHd=<A1TSI%C;Q4;aU{$e^4IuskzKse*Q za-0f|uF|&fv_*XMGW&UQf|t8v7_!aM%|nJ7L3ifXCQg582V^lV681&_J(uG$rIef( zk4LqMG>JYCX?t5M+TU$(4!z#)8W3yb@KSfqyn7{qaMkB=S*D{x!|PN&X98G{(3>vUq@{M(Det$aT8H~~ zQIVJ&eb4jQOHY)SRF&^snDVWnIrMsC`+& zL#NzeLh!JlN_ai8oT5H~9JK5^y;bLW=N>A)x8=P1+%%cnqLuW=fks;~{$?MBA#x3E zz-mW&5)>O)?s{TE4c4vb!^kwptI9h{x`=oF26x3dZ&7-^mMG-@s{j$bks=~7HLxbI zy|2qA=IKIY9U9$_TV-$IWoV%4THRHk4BmrI=cFoRFiTM*@dvah&`r~9?`nz(k=JlC z`;4JR&0&#%6ccq^GKw905oJ%M>^iO<6zH};ZXYJGc86x9JAsYk0>wK-r>UMje004x zkK&*GoUfkUKUAW`{?J zBy1WscEG!Dfs4{x*DS?aDxoj#XpoRu=A4>Hu>IRZ--@AyRQkbu);a{v!X~?Y@G`6Y( zr4KA`1zj=sDkgwN^^V#actom6PE9qPz7pq^d+}Y;<1mxW2v#nmbcaY(8>4!yS&dNcCp zEgPGF>~X1xslvqtTYlle;Qrv9(S@&bVTF2eW2V((6&({56;N2OTq9TQd8+sLyL#m5 z(=o^5mU9n*RTUWoxEK!he z#_Gcnn2Z5GYyWfAfN2!eROUu$FJd}|npH=fq+)B~QRtS7D-LJ=&A9Y0%N^1ZrO`oA zY-pGIQLF*)jLIQc*5b_}Zj!^1GtGDtCBe5z4cm*e*(3WjiO!3&nUN)no7W|GDgG?@ z&!{O~BT6(|*p+oHosjiPDW2v@}_zk${--`^TT{#-kQu5zX9s{+Z-#_ zc9OwkGgnjeS_wR7K}4(&o*0U#n`^wUt@jxzW4WDIw7s z_4uk_2tPoDtCh*F=?~g=-Ay=UwaDyqt;HV>hCoOX2|40PGcGlsxOK zXs|wearMG^Dux%{8E%*1nA;mu6K(%RGo=OS1`#BpS3w?`Lf@RX9{E%4CCS8^b!du( z3e)?bL85v^m6m|YT!+*ABTBd@ksh;O>_BrOF4(Z1!1Yr0Xz#H!ld>(f7^`;jLJ8%M zNK=8*i3oj79iO0`YA4@(I&Pcey*Y+j_BbsI!EjB1Wvwc7EF@snqr5A%|6GYD1CF|6 z)zd-U)wi%1IU{j$ZkDpbd|HviNfi?4z?|*&3!Q*0p3}YJw?9GqOzv=r^^6F zMwtH8Re;dXLgd0R%7G*VtJ<#4#Z8#ex|w@nD`N*598MJ#W4Tw-)Y|k$e3BvbDvOw3 zWWNKf!q0%ITPx)yjH|~`!%n1UG8P_Q`|^tc|0jL5ly)!tWUsqR=_XDsw*o^71rv*z z`pZrm9jtQCgCrDM7R6BLk|@>=El9moLmjf z@t=8Pi*X~D7E2S()bXgWZg}npW|y{@zQ}}v)+UyGV%C-s&`x6*RRuH0Zy(U<6kg2( z;^NQ<(yeGhbwJ?&CJ%{>Jo8Op*=Y5Jj}TyveR11c)^xw6597~ z+!0N&EMYlyR9Oq2+~rNDd5HBGghMIRl#hzjgr|^QeDh*ZlO{y;5QbPd9(kL6fG&DA0{{NWT9{QF)$se8gkbOi}r# zG76!^{7KIY9^i^})FF|VO`VZ&ehj)s;=92_MvT^41apdpH&Xj_l5@qy!X-V~>J)?2 z7+%#g6GP(Lm^lzlM~IXAw(_hSI5ex zxdONXYFeS_&@_NfRvf0RrZmlrPPm;Ddm!&2RJf-sIMMBd!x-!sD2-hD5bhWaiO)*x z#>I=G9njMT>gX+5eq>B-zlq<;_PS0-lxR)qe*;W-Ovd%GS1eIOH9D~Jp`^8dQ$`lPh zi4ZmBw(_Bka%b~^CwS)*`UUtSr0!f*JR~;lK~}lU5c-lZ++Ax&!Po)tde~ElY|Pv^ zynoksH(^)+#T?f|uuk0>)fhpV>Ez(%)55vfIJVdKH=rUn?+mEhH;(iQ~C6{*kz=#c>A zc+K;MxH7?s&e$2s!@x{}T+ew%Y))Qg(2ZmXUUgo+T6!x#AdzE6t*d^w$3&7}R-u~B z`LO?s!?%ou;rY<cpJck9 zHu`vr3Rg4W;%7tGS|gzg+siw8(J58i2hDE8DEXlcvOS(OWJeK_rI9T4GOS`M#V}Jq z2=2@V<%mu*5xfu~a|8_kBEmdf=j&JMJ?L@u*hluB?YX0bV00UzVo%neJF%>Jo=;NN z=q6tsRNd?#bYj_IXvOZ4AOI$k6drQ@QMB%{k5#3c$Ypk_PzDi*4z~c^c8Hw#E$3?* z&?)5G<8UZj_^qD2mQcs>Dc1T`rNy-Q;$)j<9QMrD*2pW5bqy4k%K%BxkD8w5Ko|;M zE4YopIFPu(U_vRp>aAjiC2!MK^jGGFt#JJnsao$9L5h;%hFG#=$Y#XUE&C?M09g8k z{4>w*mvev6pdVMFgRZKEFwpz*3Q@WehC4zxxHn2bxK(LbIJp{Dq&$E_s8tYZP)6E} z5phVRDE^>KqW7dCxlm&Frn+sk%KP-1QU;f(CJaMl$p1ZwLkmYizvt&HF;@YYufQZN zQ72o5@6DHw+?KTgEtK+;DU{_T*%T9Kqd@xbGPdElI%tDo#!jdEt=cbcVX}}gn3(@x zvXMXU9<&iE2Q;igi2XV*|MX^bW0bdxhQY8@FAZuc!RZ90IDTih@)w8#VtDbx)~;Q7 zWhE`JsIR>uGc>Q(alCz8Ci~-G_!HO-o|w~QbdCD*lA2{@0oz)J3Db-!ta3UGYs3&- zP)q76R_M+s8{wQX+1fsy@nz6`AnW8zZkUN^MSBfd~`Br#j$LE1(gCMcp&Qr<& z!$U`+Fa`zjK?^_83lke%WaVAEK@r> zrn+k&OTi5Y%1G$;*P3I`bw*{WPo=cJzHLY_Z_J9D!JHP*U6Sy;6C)I!<3F_!MKc{E zZcWnndSL;!{7(O)!B+ZVsJcM;TgE3~`t2kW!a$_bgLgd^&c1TlY8TREoR6%VuxT!p zwpB2G-(dPqbk54CbPZiP;47MciMa`M6Gr6_^0Gf z%Ue`wM4D1Du$a!n+oA5-rd15aKmLFlPm+W}$nsKbT5)FlflIp-!#XiC$EfzE1)FFH zXo!DUGK{7@+%Wjdc!zsWRDi$9}K= zDUYEtSGfrlsf)JxE@Imz0egNz9}v~0N3e_z=Y0k~3e=*CHV(th%d*|sJ8AFir5@z= zP5%b;mMjX5JXSU#3{8CbfL9>#}Ww~_1_4T{A;L_dj$wUU`QRU(p-d3Xl@7JHTm zd9QDE8~|>Gb_@sKeMDoc5=&;l+zWn1j8uyoj7r@CG%n#Z?)B2*0M|23bSb-QZajyQ zt*MUN3usr7OlpIS6=UjJ-zx=VN2F0RH?u72#D)r+Q`mkk)@+~73ZIDplPHx&7q=Cv z_P^QI?@;PRV>Ioz4fvMyFt*+^ZvTbTDC?R8wYF7a-#N!Q0Tl#dDhUOdFt_HUh z^g7=6$Lso4mP6)90jy&s_+2*q*r|E0(fPgYDnlrnjk^xT8TD=&D;+ScX`5I!GTL3m z8f^mW{u|>$8RnF>PzS8b1 zT952^ssRfE23H{&zAnm~bcm5ukNS}6Me5`B|Hyg^s5YAKeLNu~XmEFTcS4~!MT@&z zafg-yZE&YR@s{H5TD-VZ+@-j?7Ygq`eLr9Oo&T9VyL&d-**P=!-kEvs%yTckl5PE+ z4z(c5Udw!ckKl_nSV3okba4yIZvB#^H9)!sW((25Y%KXhODQWniS!uJ^o8-z(A6jX ztA&wU<9|IVzG0N;)xnqxr4i6qz>psnwdp>WRvvn5$wQZ+-V(d@%11+XZekRa z+=(+#12J7D4S6hGKXGc7bPcbK>$)Ay*EX2rls5i?-d9ze6+s&Y_pzf%Pm#idlRcjO zrNH^UIY{k#X)b0=cE{YzjR3Lc4s6dJj}h!vrB8$c6_>jb#nZv@ zcBfQC&eo#$Z+UhTPgj4DI1NQ#`a>WS)Yba5IMMKSs=2LwK)kFR^y`($PM9tM4&=y<^gwqdTY6VEkM}bG)ziBNuAVO{_46f-GVw`?Y9h)IMl}Lu|Xq;N64f!PWZlY=|j^iTZbk-!9s*L6KJSW{#NN2_fur5#LO5 z@Tvk{y|a|{>X@yOXJonOV&|~;1nV4uI88Xv*XV@kr(Dbw0`Lz7S+3*=G~~)ozGPgC zMzQ2Z^rl(7*M}V2ymMMm*WIR%lQ@`05#udy?YcwN(tS)0Fi6I})VRW#fUA4shw)S! zB3y=eVojU?clEsTfHj$G7W{=|6{_yJOfy~NCuVhIlNN$}M;$BKS&Smmc+@^?JD-Q)Zy}?Z>td%>t4&qmOuxm`Gao@#QD!=rVOHAhU4B5h!#Ofx%iap`Y6{Mt z*Q?lD32B&_;Aw04f&UW0a}beRE#XS8=B2IOG3`liA$ZI&!oOJW&@;Rf!T5q& z?jW+vw6Rp&PU_z)3mk7Ju#X_bpDt3Ss46*FI~&3Vyg6rz1c_B?h~2reyq1v#Z{kV?gk~e69;Vr5aZAGbgK!HX zu=@F9H(;@AySRY&YPoI%7Vh}G#Y#$B*a$WsM9HcQlUb#X~0>}t}!xgAm zg|%aW7!#7u59%jVyJowTi=#79`n5pb{3`Tc)sZAG!@7e2xLig9-7Q8qBfH9E`H{x- zIUWBGsc}#&uEDi8zt7kA@ZUd6s#uHeZQTVn(WO$g-GnsYbgvZ$LDx7Nl_WdCH7Y6J z6?#?i(W_uiQr2}+ev)qr7}}7CzG64CzV9tXtQ-uJc;i}9Y+_LM3-_IcU63b43%Nyg zv@;%~o;tu2sXx1EXx3tvxH|e%Ii4t9EBnKMnFmj z1Fv5MKT@f-CUBbGJ(*IiyHnSM=KCTPhM{IJQ1j{UK)Unf zBnI0%QX_d@*g?*g)Ol$s(^c-5?c}R1z4Z4`y&BexukP^U?;1t|jK?mGX+dCGpTLS& z>PRtEV=f=64OnsFR$4=;GRD}mS&oq}{F?p$i_{FA0B)$E!mB_QVGA?1+pPQV!uw}pw7lpz3iF~T``ahZ$YmGb0R=+ z5}ijS?sr_}v$4bp>SQ!@nr#B+Ig;$J!i@H1SUyqV#c8$lrA>-R%$43yaSJ6BN9yVU8eO=6i#MO;_#4D#gitvJf`eBzKXJN!4q zM0?#S49eDc%%-+K5Th5SY?nG+;^2q9A=MV@i<6aa6e<<UjMR08531|dngH`ROF!RjJjz4{a>Q}6}!+Bg|q+robBcI54IZ{ac`bhx=e{I;vAh%!p>d2t!TuwRw|GgW&4h;E zCe(*(g>P*GWvixIx-Qg**k+dud@U7=%rW0O^ckca8?5ywThNS1XX|#xB{Tsd71{R5 z2<3cI$7Yjw(|K7xV+8~`rd5vM;J)JOQbmTRK^f1R^d{33)0R@*EjJXsaPO!t%V_3W zg2%qaG;LLr<85Qtlo5W{1%cRxYqXqL6}(&u7+CCFGDc}zM9?3WIZVTBLyWgR{APR* zPFA9WRn^E;gyPhPo)7m52A;>%!{E4S;p*gA*?r_jpWl-*MbBinRpmvk0S6h%(sQIk z(UHcB*a%qEvx5+h9i&%!yI^zz7Gn`+HWu|9DMs$Ikz&L(R95{8hFJGPW22$)9;<4y z6Axl0wQ(Z6k>bo9EWFD{)s?DkZmR>QGgFlAeE_7IawF@*C59XoiLQH4q3Gbq%7V0L zZ7IyDXt~KaZ^4CBw6yQea2I{9qe9`-2!paY!57lS0KQu~pLwj6H(qF|26zk-A&BK; z$}lOa&`;Z;G&Nn(1qXsioM|t8L^4+!J1%!tHR~+HS#j`!a&iePFMtb=%+fgquc792 ztliO_ganOFAn#YOO4b}Jc{~1GF{Ww<|6;YbLzO}u@Y!^Av5{}y#XDBBwgs>26t#)@M|yT#zb7noCK6;-jek@!2F)3w59+M}#&wmsVwKfGugvMvCtR%sYtPg~pt&;;F%tZ%@`CC+Uc zZS{(ULmYwwNNw|Yi`ek&G@Ic(YlGnX=$l82g(kMoU}M~Xn;M>Wykrwdxl+Kw?sFNvZ-|nj{7-HqlOy!oCntXc32<|)@F%7NOL|WD8 z97UM?j>OPBRk&IJa<@#OnBzNKKr;D!Rol&KErXc>Lg5mij?OCVdA}h^Rv9uS$HMs;&Ow79jxiKQzCNYYgPa;A!4Ud3G4xncvxvMbGn3gl-hzr1#j zR4JKXjvwyH=!pK)Xu>2&s~7K#lmE7&eY;(9&FW(?L$`908h9La>+SlOm8jbOMH#lW?3pbz~o> z+2D}Tbci5mI9VQ^eI|5w{$ai?(xXch&Ud$mpm6vx@qpMPJddFH1ZF`~QH4SJ+WXO% z07A5P@}+sFDKJnF`$AF-`e8eRDC&N9TE@y`k~D~3lQG>b{(*ET4prt_>wC%(b}j)j zHw#{Nhd`dyZD&P_V74k-yq}ZesQWRQ17Nz`Rlj^(45>mFb1v2lN+Q+5^4o4Mis-Fm zK8-=jo5t??nRQ_L2_EM7cviY}=!lMtR+pQWD2+~=LH_Azx5f&dnmKtrFxfjlvm)Jjx6zX3d2jUd4u@E_mJ4|A9QzA+n z-Zva%D*FfEG&zSoc-^=c0K4w;slq{u0Av(EVBb2AN2x_Ndk@dvk3p$ze{cjIfw{Vs``CAuk|`${0zRa#wc{K}_k3^mR^rvDDuqm#PyC5$LkVrN9i9a79f zE$oOFtRVB%tF=OZiX<=zV2(t`W9kF9=yH9ME$+u#yL>o#wmF)J8e?FK1C>m_#XeT^};Y4BOIfTBb6+n=;JG#KbphW5&BCAj8{b9+DI#e)WmVeMi# z!mZ{?lyaYFaf+AKFujGt9S0R;%1Y%S?RtlF1p-*S+<|UyED955cm$)`Dl)Dgf&zn& zJRa87F>{b-y-F!PSqU7p$qWRvQA$q@qmjxRSM3+jQ?iBWW$dfXo_~EkOdd3152Nqe z#Na#c_4Q;={Xm-3yS?VxHKbXu2c)p5<5!O%cbX2+ew%?2g31YdJYfIHnA|*bs47`` z&?453b*w8L)LnQG)C}TS)|U<4FsL8bNP@YMYH7UMr%OBuVhS|TCOe4!N&8juM*okB z9rTA=Lj-?#@;hY$I7(tSQ9uDBp!l6`=T3u^0LU7$%vNG-g(JNjTgPx6GcPT~%Bir( zlwZ#Y*VhrA)8~+$r*y|qaXssZB}97*Rv!2nF zEwiDELJ8RW8|Vxd5$FsF07eG=4RrQ5)Y-p*&TynOEZhSVa%yOJ&egj%E+!@a6X*;H z_-~-I#|Jv8Qbgzm;OnjNTk4h_vf8x{W+_73>&dA3dpy&g-!wD=9iO1Zt4iL`;6BOb zWHtV(5smLKjz5orBnB-OYu4hWfi=_Wfv$387thEYp!;IU-BZ{*OV&vJ;Km6;%Ykn; zPaSPU(dO)~IYO6zys_RGM^=^m_W!Uo`l&;@$z~ZSPco8l;4dq~HMB+j>DS|?=hc83 zQylfrgO_#F;oV_PFFySEwa*>$jE*DPx_+>+E@wVH)8S8mioU$>wmfpK9#~hY01bFO zuyxm|xDBvZ(^Y1U_yjG)Ni|HS$ohXXZT+uItA6cQ!7tQlY*){F3;2gp_m)_| z6RY<077oFUmDBZpKL=Wj2IGEYrC2>LZl{6a-jn{MF~apjQ5?T0Kw40jt5cbOIa2N&A1?JAd8w zxc<@q{^qjFtKd514pur+ag%bASw)35gi>wQSb8k#_u=Kov&ivrN|6i^By}y&c#V+0 zG0&V+>(73VEKwO{skgiTe(VtOF`adD&$svfm6*yyVG7w^soeE@CFyA;rqwtm9!$2X zTNg-OM0_2gyB4pOrp`WlT>rLt+FKdFOS9{3%AefCz%wH%WZkpcv=ZVRRVUbEm-*^= zq4495 zM~i-idRjo~B^yuh=HM7Js{`+NJ({VqA|cJqZ!@c`#7z4sIa~M}j^8*gbXWM1YI6vN z`LxGW|Ei7RY=Lno{^kX?jtWzUE&+7Hx$95-NbGboX{T-xFIfG1{`(r#!{ZE5xEI?0 z>h$~(b>O-K3(>Hr_uwCv0G%3KJgT%L?B|-Nn~gjE(?|a1y7q-H>d!L(mL@97M8%5`smD(d0mdzfgJKj)h79aU;*iJ z=Bt+fw{Bh#V0P;Ml8NhS`+yP}=me_1#x32D*ZVR+%Tzc(xTYN4I70pt z7%n21NNP?zvGPgDT%fWb@)eP426i0Ct@4b1!mGXQW#-h!w?){YP`7taAAd}mp+$kK z3BOPLAyen(^^Se9r8$E$q8Sc$L$BETs`sN6vYk?tE*TBBviDV#`}h#Y)^)4!dCgaR zqqW}C{EL`qyXE`G0#2;vYA|TYy4Ld#J2_G0R??oUNSx?1BQNVAH)h9ZEs$-UQE8Bo zLSQWS$wy@&9!wN2RGeD&ZfcfWB2!<5oYJ!1b5^QlO!9qDuzo`TiBgIHB828P-XpKa zuipxTAGf&ch}n}U>{Az`7gG@_I(7Q&8Xp@3Gz!2T*u({ilVB#i=WWy{loYB!ZUWQH zsIDrg)JshunBy6Z`M?=~s>(ZTCAx)K%-~t zC7=;FW7RbzaG%2QjIcj}7?@}n^d&CHq+!WmpLtzYfeFvz%)IsS43k+2sN_IjP%#Vk z47>bhp!@Kw7cwC(X}Fhw&}b%L^}X!(P1EAHA1mDV%+ZUCXV_>G@UH&1m!b2#v=P_* zR^oz4ueAl6dWTZ#v=ZpEu8?X;^Q=*5D&W6bJW+e5oSLPZe3}E09V+XK>sjL+8pk8; z+0r4ItmZ*EoN4N!F3lgBj8Z094^s|DD=^l`k_inhlnYI(Tg?#qdJaGibU0?=Hg_qs z9n+T9Vb{Kj0m)Z!6WH<6kGRn{1gI7`MI`&ul?9ahoEPX~cR7L!CM}i~KeR~@2zG7V zJpTib@<+L_z#%)p-;0w*(UBe1$JIe&JvG&GEa<)&rS0up!%O_OT};9%XX5Z?Qvhv3 zw91kuW(;~mHzwtdHI@Z}aBosuqa545zuBB3E3XD)O{aH9{s=0QMGxPbym<^$Ps`sY zckKSU;kInw|G1}F&Kq?XUr`0>K;i=0r06-Dx_cps6tvVU(yb6Dt)C$DUYu{-k&S z<5Hh1xQ&i|t$0ApU4-ahL+@{3VJ|`+c`=i<{RgYR1Xd)OvGt$Y_0fi{8*B~NQ#|5IfM%OK~E5*3Is zG|z>_x}QK5&1Tf1OftoHDUX5C5-{t)2-E$JE63hagVr3lLD4sp9-x~8%z1$twdweU z;ssesQKaK#OJ4bSzr)bW2w0O{Dtm@ct=r7Ii zbJ0qI8bpiO4|>CZ^;(BH-=IsO7%V1C|39nae&{{8Rr`{>I~mYm+elar@*uOaPd6!b zR-a*)1j*Jf^9r1Av{^Cl1o}G!kN{Y+$PvSHhP^JGQ*j#b?~fp3>i)HV04wA6-zFiW z^mB~n2E+BBst{_~WQU#w4YzC58Usx-Or?;UFm~nHOnL#L89UJ*hY+iaXjAo{Hore! zrfz@ie^dX1UA<+8e@S>E{e*wXX!-FED~fLhiombx6#pBF4upY4YrD7o0y^C6X0O*YRn4UBHIIkgRijMbJH*@l_h9{=@P@^FS=J=n1Y}JZEAMSK? zI3-*1{O4lt$jKRS8H-5kHuai14nQ3YM7l5VrkZN`WN)HSUzxY0r*Xnwd>h!8oNj_` zmx*mRNke-`sOy_hlph+48~mczIscWt{gAInahX15-4p>LpbgvhBEM$U(@+h|JtyFjZXL$y_MpoM4^U1n~~sPm3Kzk<#-U|u(1>3jf%{Y zTUf>tT9=WBbvmGPR;7QGH<|xxv$%+pBxSJJ!4oE`+@0EV9S-oMIm6o=kGd2F&{mBf z$)kNq#Au8Q*rY`YT6h<;s4?`5Hb98V94n%2N!(_!*ggfBaTQIE7qS}X(D=SnP9=oL zC2rRw40o6oP0wF~p4blXJ`~$N>$LmN>wmjhvmX;?z&{_T-4_-#nx9 z=Q5v=;4NYB{F(M7&VX;P&;#O12PCZBunW0|nJ|plS>)iNg^A6M;XPk%?`2eE70M72 z;(93)zUF2szpe*D=qQC87zFvf7mZf6A1nHn_sn(3F(ThrN?l`ak=pOVWn&q?apjS%I>9EbeuyWd%%Y5+ue`UWmI0)T*+h190b)luF&UK zZjXa)v7MF7do3MWecw3z^d$?-S;pizX$!Cg$94r2=5}H6fywBzgr1&}qOT$>DCns! zotVfbLP!^547{y(mUuU^E?$$YB#8`Seg47n11O|jS!JzOWsNu^4$%tUy9f4l_xq=j z4w%SK^Aoxa`Mi{9hkn`~dB$tLo+J()xg5L0e!uT!0L?#(C2G#ANf7W@!gwp7MI4P> z;Js&iqYq*cc0s)*%>W6uF5{`-#>Cg5!sg)76{5C5s^{Y?6}#FM^gp5>J{m=rcbVt8 zB>3`Oy4ySJIh=!)<(s36>TpQ_02082Tjl2zU0S6!xvoQF!7Y+m{7wGHRT2M)Qd7Q^ zh)lY6{KIV3yV2A(0P?Z}C6;+{TqRJnUeS5%MUOEZ`7GTKe_zCu8Vb{{H`!v50 zTw~aWonbuvsX;IA>`{;o{80XLLBj0Si54I9?&j|`!Y)D^uhGDGK74FhUI z?5lRzlJL?3mNIT{3Hq1q({NmyZ2ZDVH58$+Eyk-o4c1qG3z6M{e1DNsXG~*JUB%4A z?d$@uqX~s66^?r$^>5$Lj}qsPbtdH-Ebx74;35llc5#%-{oa~vVE~F!Q&-}O7!ckx zBokFq&~P}-uxa1c1$l!d7PA8XV5J#(;f39L7~K*J2LNx4^95ztv(2_{n#zFMrK^BB z-_PPU;x+{)1sHiw3LKWmLgr0DL7ayb98!Qh)`^_X(v8Px&DdbQO@2KlezRvSN=8A? z7$X}dnOqfTtS?21`w3(#Mdd~1SkGA>v*TH>#J0~qcgU&Io;Xhp(+6M&azsJ)JP02F=#R$`>M+)X(P zA>U8{b7J@mB9gYOUyp+5=4&L)V7V36*4zVvP$O3-?I38m>&3&0@ijYr#nlO~rDoE( z$^qSb?ilul`fL6}Qn*CZ1H>9O#98ysOht zxm_7tp6OC0c>fF00`ZQ(XQ<8fW)&F1_jOJ)wcMnylptT%_Hv`HXLJ0_YvYnW25OHk zK~jMfG)r!`Xb*i*l5O9ekNf0d-S4n}c|C&=o5}J zsK4dYhsS>_AIl936T=v9>3+r{?pX__vj;YUzg<2)S%ancXL$lD;g03x>fpDn8-X?u zUrO^jfm)Oo;oi8K;c{O$5yg`Xt+Nlc8E|>abp_LD9aD3~jj1PUykvTr_Z8#2qTL~y z;vy@@*ZtY%8nQGLEq@7ZLwM^YE@9G<1`h(zYSbg3N`2lX|D%EVBFD`W*?vtj(BVOW z9Ii!oc|ezh3TRw{wJEXYj;tWfzf+1DZp$>2`40U?P5Q4$D7ZrNT3OabqrK>LIjlOn zB&vQL(>j+2_O%S#u$k5)8_8C!`#^*-V%PQ?p50B2|ZDiMVCMA-nwoe9^ zyG_b`bBMbfW3oOg?rwLVxZ*p2GBGZ!kJ~X|3y|Foy@DJh*n!2F%e_Zk#OdaRBGdMT zzlDmwlC-_CI!Gedwagn?ntNM+#>aKm2dE%csKU?sMuei4tbcgsk!y-$QhgU|QcUnw z=p9}}&|f1GJ{Y&4{Mm+-zGimRBo-@4GnQy8eD?9_rYPw#t@QEJD=;XS#g7g{_mbXj zGFcA+S(!5s&Gxv#4oOG;0o3u}4CMu_+{mw%QzckyF_}FZ+XtF>)(rmJTgeC-aO@Es<%*vXYoWh6^ zh4Gf5A3oMuVInHli_Ji}o2lz;%d- z02WDOO}X+)O9&yv_yGl+&d7O?wWixO#}ufxE3QH`G0nsNYUuE5WISST{iLqogprp` z|5bZzK*NLDu7KyXSlYeeOr&!{vbt4kiCtp2DuToq!yagws{OsZD-$hNd zw?XcVnk!;cnVS7%47X@%#Zf}jc%H_s45Hvev7eqozj@jo>6M2cBuPkzAfa#dD{`X8 zed7c5Z=;vf?}L9mCMnU7Ua^Fqag6JV`|Nkf*6Wv$>&Cg}lN?7paisLvdmX?3sr{<; zP@8-V*X~rylQRC(ZvfG$;gFuoU`Cln;TyT=UioAWMY<@}BDn}9T8_ONgwNNo{_>Ar zLKC6ri*ximNP`USIr1)Prk4UIAz;$z3?p5oG7A~<^Yu)geE^NAU_^4hO=b3kV8bWE zd}RZb&!v_TQb#!T{{3igYwj*z9QNRmaX_|#{(A-akbO=*DgXUXL1bEBMzYbD zL^|n;OVL8wc>Tp5-jU=?qJ1Pb@~7X475^0~kcE7Ma*}9a<$~uGOQLtHxl5DQSaS`$ z|6oM?K~;naOq=5krTAZTN52?vscR>az?pNoChCIP$j@xL_|Ns_X2m2@L7=0Cb=@NV zL`e&YWrMSLwolUw7IUsAM%Cb4{T=rt<7*48cw3Qt$N~k>RG4TLZ#Y<37Ndb*hr+x@ zz}Z6WWiQb;V`4;&c2;O^SnXpF<=e(%#mk&pd4nJkVfM%lVlBIAf}DMBYBJC9x#ph5 zX*O$M0?!C-tXzkycL-8qLtnXV7qGiBEz-1K;N&Q6HPUThqo6=wF~<%?y7^ol#kG0T ztF9H($paknC}piy0ks=+yB`+>QN(H30;fgZVh1Z~4=>hChfQElqaHQne}+N}7&3yX0BM%HThdGJ>m zJL38q*MEBIBi{ceiJZK8m_JOsB*Fm+yc1IWik5{z}x2>z7E0ci?5_Bq>} zgS~4w0kW%RYom}`7D9%E+Nh|bF9zPYz}n(qnfC#27#<{Cs3r&WJ`bFE{lR^BfuSz^ z&c)3}$aEZB?DPR}F}NQayYGIh?mMNix7hi^&sRkSq0zz8>Vi%=$cn9`RAuw>ehQSPuc_Oo z&lUEg5!Dy%V$9qMH4l9ADB^PJ{_yk)9WIBS(iRue>-&)NoGvSPHOYflI56yZ-QqyDGgQ!#h_#AV?b9`Zf;M_U)x#(R#Q- zBIFGIONtgN_?^9|!EW-Bo~GsEO4=Up94?N|Q$+5zVOtCS7)wg5gogw@z^%fAToeK{ z2OFpiBDlaqD8}!VRv!I3jrdyPmFo$xWa(9ZMhSFecw{7{HAn5d4ke*Pxa~3_<`z?4 zq!Tu=q!Si{Her-+q~L}hw?FOE64Y^#gUg%qDe<#^26Nc${|tsif5L5e!q3~6${2J?N>XY-*Ij9<07xgvPew}O~G@Fzt(u$*FGOi5H zGI;MZVQ!7=JF8L?^N2F~kja$y12>=wYJ2$9-{$g>Zs~ zfIo3m)mW15JEw{4vaS-i^k`p_gQHsdH`o7F0@NoeN{;~^*T~&?i$smlB+n2-?kScM zN4@LU0)?ql%G;?!EJd#;%$mSTY)h+|*xyIB9aj!m8xXD1nK_!54&D(^eJ7NNVLDRm z5i5UM2F!cgJ=~rVZ2u?eS;@k~m-$lbH>=}yK>?^z^x$P;kWI`{J-8W7Mbd^)D%SVJ zP*!Js0V7wW7_|U}TO(^oO8mentLyc4L4{ZA-&a|N+m}#WyQuRz-*AIW2L1k!Wv;Ve zmg9pE1$2MNv^g*=&<`ZU@TH;TzNvqBa_m``V4gV;bfNu)0l}~7jejJ{JbUH# zKO+2Ta=^Gv)f>sL1KAEkfBEye3rM#oAP5YK^&< zWKO!Dxhire(N+*3+##-H!6zoXY}Prkv#wApTTtn>5DIqrc9z~)&yvXD<-4cTtiYEF zP>*{G-4q%JBGqgLpgoMoK(P-Y z4o&n!;}(nW__ zkI)jy>r7ynb^%UZLeTWq_L^d7bT++&w^tSN%o}sz(|&Uzn9TrV?a*ItI+bnrR%28@ zP#shrBX3}mlwF?|qslzm_$g&RHCj>3sYj8omSBb6k+GUK$wWD+JE4EL*`t@SeH2CO> z!p>Tf%D7!*pIgK0-DkHi9#>x?lV2+xv6ol=o0MxUzSZVg5$o}rjbK_{ez)#xP|>Mm z&1augd;MRr;piWA~dI%k7Qhe;Z`azez+{>SJbG@sE5^NU=qBNU&}j;KRc zWH2@*p#$zZ79?0(?a|-sl$W5g8u3Mol3r;x`TdM{i6zHMBUZTx#wbBvlngOT`!^e^ zQaPQ}vGYD@8=W!dUxBEFPLq#TMw}(*VKI$HV_Ed!(I;bdXIaI=k?rp_cZr$r$b zINcd?c_zH&3d{*$!-?|x$)CLI#F<1Od7%q*iU(5hJ{ecbMU5xqDYvw$4Z{Mf~2J`GG*J z&nqvTy#yWm9bwP%%izsFZr@jEl?%N?62sP;>9Tn;aR7uAcb4|>F=rGVCAnUq%-h)A zf%kiTW$X%$Dckbpr9B`i%>n-Z*Ib3Kxj#{OZ*qu!UOA^lhc`sgqvifIujN8_Ex1L> z`!m5I0Hfec6~aNAe|;NN7DiC8cwJmtx-{;vasC7Ub{%kuTRV!Zv5NnO{&Vk>eG?<7rIm;ADo9Iv&=b0H+4Dd+Tzq0quP?A z?mGqS*!#G+W8gl;CcAf77VW^lb?IK;Bew@^sL1%#wKgJW1*Ur-guKTOlGDz`!&y3%>*7GwvQ>?4`f)oO>z_)g`QeI?B;=N@)W%Y*RIkap62UdMb z--ZuKbtGjHNkFxH7qy&2YdvlZU^=JI3W<)JG*=>vx4(lkg>3xG{3;gk4y$-rWU=Pt zd$y;?Shl@VCSUWK#&Dp77Vneu;xsy5dDz6V_{iN2(dGSE%DaIj2#(gfDqpZrGwcx> zX~OeZu_PA%P!n&m5F*&pkl|kP{d|trkb*Dro|;1TGEc~)4teJJw`(by$kNBEE5B(L zBtXbuyj}y}r$eaRc<_I974bDH5qSkgglv9g#Wp%XEHrb-;Yj~r9k+D1JEL6bY4zfE z`mV}V`X2u%;@bbjW)Z`g7`NS5+giLoi~}iP3{EA3Y-|IwD?>a848DZa(ha2bkVHlp zccw4kP-)$8SsuTxt8Wg;l_wKcN`4S?v+3j{AH8Do{rqC+Bkdm&E0Cj(j+(eZ3VJ_^ zZ8@7drW_$4!z(tFs)!e)2sVooCt14PReeR^FU|SYau(8QC)qabwBKfx`9c^z&q!BO z@xk&pX+4bDiaQ})z{}>6?>A|6>z{W5U%!S4M5OTlqFg(Dnb%ikm&j7G%)%~Rp_hUo z#F{f|Im6YBs~clt$|1;@)Tyl-~%8&{q z&wNYStk$#tgG`-vHVnn^IUsy>0%o5N3dUBM4lshTPnpExX}Bi*)GVcKb%<1|UR60J zv}Ih2?w}b#(2{Va2t;-t37|8O_e3SvDN?EEmG>vdoWB0=Imh4OmY)o3bXpV(IlpmX z)N!x+4!2-rrE_bML#MQ_a`X-#f?ABZ4vPb%#4R*8rUc>rI&R&jD`zCQYfKlP*4TeH ztn_X4n&L%+#tL!>xNtxuYVrIB?vvYH8*w;7T|MTROnCLrnH}ba?r}=@q?0XdoQj(O z78TyQHix=3+k`N(PgsyYzapytT3ITjXSx~=t{4e4Qt-MHOsR&1%#Z|A4tv@SiQ9H+ z1!M`(NZ>8OV2!35?a%8QmGPRL7Ic5-+D7U=iOzM!PdJo;-b`gt&Tda4^;~fIe*A{8 ze(LmNiT}5{C*|#%tV8?0x>AonXb&PsOS<4zWj4+_H_6yzl~Dg(8>vDQ!ZPn%taYDK zs85lBYZ7s`g3&f#LYvowbf{jjO=luw6c)xCBOfLyGMw2Zr^z&g|0-o)5JUVoZ^rEh zx~eA%8d(Lm#Xx_d0z-Cse+UX{&(Q)^d)enjG{DWgH|%EY;3*9 z&Z4voD>wbE`zOYR_U5wh++c*8KPwouC(WD{J6(5;>_1bZPm?{SE9h_|XLJB3ytP`l zV%h&2*$DZHqx9-r>@Vo*PqL1To*j*x=E7AbIo#>pYCQIMXNcoqvR9}oaZzDn>+J`o zLOeU{cd2%S*eH$fg6`D>(h9Adimdb~jqPkMx2w{U(T&1JiahRF@BaM3Y?#d#J(OZ| zAaGikTS`Ti63+Oy9Dh3ueA5+^I^!BnI$QR}H}ZKs&4O*(A0>2HcBM;3onG-+Df#w* zU1@DOnUL!2-;}+#*B$->#CH$pt2@MblCe+A!~j6KOQvp<_a^T{heh9yzyfRdCDwqx zAk6Qjzb!HMDRn(My-3f$I=kDflAupC)Nvdp1@P2TthC?Z+^xV`5wwXEyDB8>};oEpov3Dh^8fbsjwb2=2)WUYVhx& z?@3jY%@9O*$oooiuZN$yk&7s$QST2!Y4bHLc-5kK4?nL$22ihoTd&JnQo&oD0f&$U zs3ChLG1|uM69Y`;UfcD`2~T2;us`GB_zAb-^Yg&_)ng4HQt9DEpN|Nm^c~t!9a8#F z&q6k_qTdPnc&D@2IZbu|x}^Btz{!#}?46ti=0kvsTr!e2j26KY7%k}QMZd1jEdw1T zr8!}YI^6WR=-EwkyF$&{W&+IE4bzu2>i9aP`#p;$OQ3J4-XXMhCh+>J66JbDBGckS z!h&EKb2e-CV78NX-t`+yzY(^y987^F3T%o5~R_jqS8W#w-+oy%UzuC z(ynsZisHXWlbjA-@9Dq`{DpPouB(Ui~t`H_wgM3+`<{rs@Y|h8#1gLeY#=!ICw22Htj1 zq6=ZvzhqBU!5cKuz**)q4C`N8J!dZzamkLTi4PoYu9MP*7o%(R2kuZsZ1{Ewc@E>a zxE(wJS@nQxEO!;0!ss^ABmH8F*j2({;_gj&q1O?gT2{Vr;5Xm(fNG;bLm?VVmLK%8 z%Il6zeMwfkT?aA^b+nMNNe*2(e#aiu9MI!HOcxmV`!J%N zDGjqy&`fq#EI2(Z=zMt8#VEGCb67R>nw2pHHrE49uB&}(n^c{Oa_LC7=wsHqPY(Dh zV#qwm?rZ>j9D@RUk+oPE133ms4!ZZCr5&!W90su?jvbyW#>hF6lMLQ$qtCG@Uz>R* zEUi?t2dfFT))?q+aCIm%#85&2z`@f=1gb{LC3dSmS0%qLBRElg04`qQcnuJd#jP2A zeExt{W$+$0Qm$4`?J!Cyv`NsY-mdfP__nOD59Y( zVK95dsl8*g!Bpq1+)OFhJ0%cUSZ#obg9ig>LL3?`-Qn9~0u5dti}A;2ZaSqH#+B8j zs3SyMQq1Nzk7+{+rs^=k1|;+c1wQ`(pM%AL5naPv#LTb(0=Q|0SA*CX1i*30hGt+1=Qc2JvsG08I22j%I3CF>)!H@7iGypbk9lT_>Xp`08xW z<}$&p19)H%K`02$Gz_pvT>&hudNPxOfE1N70;#jxBvQF9q?Y%WW=8mz(Up~Eq{DC# zW}~!jrBLC67@C=(9eh6*1Tk4BMRY7U2J%GG1 zgD6{>ZD}|$H6EjK1a!+m9c6>oWGmA#Wx~~TVF)Q&PnID-Ry#lwO2~S?6g-cKX=s@3 zEgB3uaxPX1dRV0@w|f$y@sc^49&kHBl=JinZ-x~K)T07aZuvf(*qmSQHO1iGED9WF5Xyf5nLi?ZUuVf`TZC8PclQisFd7 zr;^GR#Gd*Nk( z6{5^nmxto~aoO53Bx!8DjaY=0mE{Rd`Y7PqIiAsK19Yfk%8m+mm|$e9jZ!EzwZ%v))Er()Qfo_Xdm&h~%LT`w=t8fOEbDFp;0O~_oso#gza!;e?;q4qn z3?oA2>_sFX@25{X2jQ7Dvg zqlFTQNBHq8tXk%btE~t#AdM)ib|o3rbz{K236p3qZK1gB_NHF&4_ker=c={Mj7yqH2#Tai>sd+#8}W(5omDH z5y@M>`4G8OG=canzK_x1=%kP+DT|Jd>jcvNObcVBr6R{Tv5h4W(WYL44#u%6yt*Kc zZ^^n-mar83SoAGNJvT}-6$=c(nAUiHGoKiAPv$bA)z8DH4-Bm5Ky{HdKgkl z8c79}vj?B&d40e0e&2uo>zui^!`^GHd-YoPy7%}*M@yOHGRwz@DS<$)NuY3I2bE(_Z_}@c%O?&N#_Ai)sqbuQ=({2O{MDfnOCSYQB_rX9RFr~6Hhg@YV|e#096dW4jNH=tmM zDg+|)`ws|s1c4AiAfSsm&KXQ;fEa!7-y#G;3xRM$AR-V*DdZvu!3x5%f*e91Ll6ir z1oGyb(HXA#{CyCd<*BE258~jG8CM7kdF+{rLpItsH+Ays>XHo|J|)fj?e*{+qSbt= z2SOh$34Oac4r8N-5>*0r`87w;4Zd6>*uP$RrcVa8K&ir-A<;#+xcsH7H;u}%h zmGvv>KBug;3nD3DKW%@t6bJ~7g(8*p%xN?2jy!IxsN5M7t<>ojW;eP0ty8~CC159i z(MM)8GR}Mq^Xbcj!m46JXPhN}2t;T~RZ&jg*JApUz~weZ@`weaTT2>%oWf-yqF4lD zw4EzIdj(oni(kx~Tu@A>FTd}YZ&F|l%5{G!ct-iD!Qu#tY zmPCBxg^AhosGv6!isr^V)RWzxgW(ZM^0empY|snO=y?W6bswAOUyVH#s)%jB+%Fyb zbEIpAX?>tY4)wHs%ysuj_e_4WvLdn>uQ^M|gD@;Df{;Ix)&=-P=)=}ua3xbAN<~wC z^2+VZdLt&HD~xt*F2O_cCwEIa9e_fi`5QrKZ(+s4+PQLjI~= zQ#LO-Gr6LU>;s&T%K?sV@W~Go7xRO9XCn!^vQ`^Hn)jDm=lhZ@d78c@r!lC0PuB0C zk`2N+_+lBT{}FQk^Yf1fx@UYM{i{&Rpn%Om-tCn)Z`=-bC-P=aJYwt7Q@-4ZH2q<) z{JV5FW&H(;8}r628;6^4#h4O~T{S53h90^r;sQk? zu+bL7H{%Fhb^Vu9iU?h2peO>Vg+%A47s*%GP3DgySU#LO$yjmggP5BoIxftAttmQR zlRJgLu7UktG_IqrAMqDNTbBqHZ;Ddl)irSPs8j+uLIJ&MI1J-k7#A~T`1@ z&UsPZRr*V}^>bd_pp@Ub(SD3fI%n2WRHWGkt%k>%(w{Gk(ACY3KF9oju`EG@>cNT( z6#te{f_{73zUYK=+KDn`uZ*S^eZ(g;JYX&>XDp*M4K#q1A(}2wkjdzg_*m zt$?3?)dyYjzwyY~B6Sj~zXZ*a`iwBdj7$bS`UGMRr=A8hapeRt63{*VffAm^9%d9>^7xR}BMkHwQ8Lf4TPuXkK zY4T{WoR6jm$pM4jxmOz9)1pi=x?&YORf1|$>emT%Yu$ZV$DNr*326s=d$_d|mc zOmQ&XsuH=)oLJLc#?T2Dml3~$t_uRG13#6fbiDwonNxE_Z+^$pOVGt2NjrL*wCA*L zsB-JJ*;3g$;*{qRs}0P4;f>#9KCp)v?1@_Ip0s$7Ecfa&qI2`JV#iTVtmiuDgK>m5 z;q;6_C4EL;(Pu=!O``JBNmBI{E+Q~bT;ABSaRIF^f{v3_CyjO zK9kFKQShm;yL-;3^I$7HW=n)>?TC8-s%xiBDWatg{g532y3%`iIqOxNOBk$=pKIVK zCgNjqHii3A>mgm(vGab=+nZr+j3o}C+{1$gk7T@jg;=6NJWf>ps~aj@s4lf&B}<=U0sF>ul!9Kk1v&1nLmBkibGR4E}2EGVzWU4kw_`HF#E z?36Z~==qoYj-wTeO$*d6F*ewAZ)h$9MRr_0(CVI|BD<@ z>2E#9F#S_GQRmqq|4%WJ{l@%LjG`b01N~i{0bp(Xyin~p`B&Ba_gq0oJ&ywOsOvxK zQB_prqIBc8NNh=-my-0k|8%)+|E@ML@vw#Rn*~@XLF8ckvBdWELfAURwu--*JTy)N zNx_o+i{u|BC~V0BqBRQtSrf3A{N)h|(C)3Cl>|YsMPb*x%{OfRTY0#3?36cHT@inH zr9bT7A%AP~w>bzz_Qn=JY_tb!pwYOGt*&l;$Q1rLhkx~p|Eli4+5CSVzK7T#Jq>#e zDu2#l@7}lH5$(y(KRWLEGv><(%a@`!=RvkZ=+;yHohH4BiCKSI2-;)*2$=gJZf`vb zwqozE=wFpG>@e)TD3~K`R;OQHmHVu4#erRz6mIqis3yyJ=7IW2SA7*I(gY=PPD0z? zAUo(HbioD+8Xo%@Wokou-dStQIz|M6B;Zg$4ZQ|AsDVnt&_>?kWJjIb_Ji4-Z+bjkCU7gqqhQ!#Wo*+%a3QPwx;!%U^J?9d2YC*GJn{sRf15UFzP z&pA&GiU zfC1u|pH-KlByZ`_UKzb;L>m}8^$hQ04bh@1>hsaF%OhO)PAnDqF8S|%8nd`aMV)nZ z|8RR>GgYeiX;3UU1vA6=p3j&Y?}LZeOOi)Lr1Y}QyZvH8`gT8DYUPj)rzP(KD>vXaH+rKxrqFvj=pfmlW>=H7_Y&O30LE$fS&W06c-FR z8n7a_gLzqBh78@>>qxn_#-A2utIUkt+?B5iyMZ$xaScatwDx-R#Y>*lc#2i8Vnf7- zWY;HUsZ!`G5JXlxuFqdd_KGK1a#9vYc}qINp-5Z~%IFK8h*Dyd*NZITCvjFsOeU&a zIE3m~*_K{D8NtV8Heja2#0}JjeEIbT-nt#sxfXjWDLx?)kg{&dLC@j+CF8`QiZP0;qgK^Dve6HjpI8`Lh@$T((|0S>iM5r7c2!}yFt(fj`xa> z%(D{wm^K~?Tmc9^JaaAyiPtgC>_b5rOCl$+O zfvddV>e!8*#k#AP9!Y5v+z+}l_x_W<6jwUJPbFZkWrnxb<2hfKmd)uA!Br`i#fkO9 z!|MFpsTxb#+}hz<`%azFm&XZZ$cc@K4rNwV;LV+s$?J7a4fBDw&0pDIh-S+TPq#mP z_Fa^jc+fH@s(_6C5#+JYt6MsAt-Gea9(m)Yj%&p8 zKwxHd?z_wlXr+GdHQ98hYeBftD8lk1{3N8Q+F0q+SFj1j`$d{dml#L4HGrMmD{CCs zNw#pR0R5{(yC8KkKV9$8$-2}q8y_~htpa@fVO)Tk1ZPr^75sFBOi?n1*NM}h911v9 z%K=ADfkfg`)fFQ8*^RvOo1=Oqro0F*r$ObbR@ti615hkx1Du(QovJGgif_}a2D^xk zfg5nkxDFB=c?(O%S`3Rtn?zqZrk&j z{r+0#RcILH6t6+A=n}oP`M@S$N6sbK1sDZwGp$krwL!ieb$WRu7%>-}vh@g=RerNe zGz=?`7vunLq()AzMdNBp-A6$$Z|`w*i8^C(GFQ~kRW(R|Z|3|)XS@>0uXnksKgZO* zx3u^7LQ#FLi{1GNTjbXwas*(bH!>7IgDQi=KB)3n^xO4G(g_ubHc^{DL|Lxe#`COA zre|^}G685ktce}a>HubUpeSB<{p!Ui4@p3!TvHVnL1JOP4LT_Pw~Cfr&vWmzV&VAI6kLVPyl#bI6~;2vZ%6x z&IS;=Aj48VN|5)?i}7F=e=Pmqu58b4Xhpj z$g1!D!KA3#zL$t+bMc=HJkirF1!o65z!A*#Pfm`t{K6)8kryzX&mW5(qh~IRZd(9# z=#J1qhT&4)w@8`Czt#>P(N&MwOytegPL&&GGa%?}_{*)%Rd6V&lW8fhZ;NyB^s$lh zuzcxVQ^lKMO7zx1%D?VI?$gIbV=L?y31+_e`WTtrhgL5bfZWn?wAR?O>v@$nr|oxz zJdSNMQ1NP87x-ei+ItV-77k-QW8+=>Fv%4>WJriKLdpP%GB2yXCty?0U-PMl!AA9ao`AuikB=dRe&2c4wPB4mizaZT#1&)L$6Pg6?%L8)SXnsMvwZR(lB#k~D}DywYJ znd4|l%r~c8rTPjg&Ez?`(jTwSLp-`DAa%Y>qiSKu{NKa$A% z`{Osl{2HfHw|A9 zkYH2&4=ggkCX;;LGP=?y2Ea;q_B3WHFdyE#qF>%~RHIr9)~Cqt`t-nV3-Vx7!#d50 zL_>3Ewh2c*VnIG&q) zls_JNZZnBmJEO^PC9i;Pv^-+O0Bc8gx>1G{sCv3-ak2qDW`TyY6FlkMI`1IAgPTo_ zQKH8%v0bhs#|Zynrb}@zHBXusf;%pawM|s%k8Ch=N*El7`7${hwe|23u;HlUjD8_bq5%5Toirt&Q zID&7D#!#9H=Shmed!rTeJ6pNH1%sj&{*VsRnx4~IU}>3P7FG+tIe-W7_+C->e<#HP z`$ZkGKrmA_5Q+KY;G39ggom>Kfa)UvflN{X1NN`X1u=8-E_A>pFeMw_PybF-3{V}R> z{ywEzpzrW6YO(#{ZcftC?7B4BVzR_o!7ya9^W*rsd7EVE(wcn@!5qh+M3J?&Awwyj zHnt~e{!un&8CnB0XG4wxJ&)^(Z72w>IS5~Ttg3`fE>7M;s}T_~nGfBLh$07!ac@bA zRcDV{s(d>+A^QMU$Uu8tQA<%NP^BNOw%*|^1VStPO zjF2nu>3t#QPkVi$Mo)6C=jWNus^glt^KkH;*Wx8}T$re{lk@+fq zk_sm|ZW?17q3TT@ZDn-)y|VKWOI(lAVgySU~wTG+B<@;aCbN*-4p^DW(=IJkCJ4-OhU? zi3!bZJzgCtefQB8I6dP0a5+XVlR#qEH#)JdbU@uRl^E3sEpKeMC7rWOx0&zk8Ap15 z9lmt@)k{|&5HI{r|Im4O>5{yREpWx+r!QK~@-Yz8<1KqfF8gRfINuzi6&UyswI=VI zX%Q9M*T&j6{`?Meg%PK6;>N9&i}zB|j<>#zRjw~{2FI$oKlJb?eJNI5)|>6%0a-f| zrkVNpF8G^gZq$eQ+p3Wf#=7Q^@eNW&V53)e(X_(qRXI-mh(P)4&(`&o^Rl0(cY^bOEV%_8 zmVW%+t&G}AHFw}CfZ3AycIgb&m(IC(+ni*zQPIlz4(VYi*L zXYNemptPpStKP1P*r7m7mN9w)hn%d(1YY0Ka3qZ(85f4!rWuIc0iuK_gds2uQ^-4- z8arT?7sAc-_U<0Kh#&RMHNaLdwu!CZBN@qAe&iVQvc$IKLd7k~1|i?brtAI64xHm= zkkuPTsNCBh-Kq#QGNbVxn8w{gi3H;B@$h}XY)7-;W(b=-vX0qHd~EUU`5?+%r4T2+ z3jA&Hg#6@yE(;l#UlFy6hSuFGeXccQgkE7X6UC5gO;VsE#pa?*X=opouPrlU*vObj z{CKJwLn{WEaG!O)N0{D*uNY3Tm4&e}Tj6~gr0r4z&u;QMbnkeh`CWg@fr1ALQRB05azhD#AP#+4a_sM}#f z6h`dtHb}#j0FgX-r)a%vap3}QqgwAU4N;*<>qIRj`mj*Ia;{vG#eB+&pjqj$jn{7a3 zR_sX!hn-;GxFx(kgQ;=K(Ca3KLX0U_mkNE{x;1ZJgtB>=*7RG!q^0k|h?P4g(x-QY`CD5~epKS65P)L3jl)F$| zpd{uZ3`J1$4JQ#^D|o^K+b6^+ZTB+1@K(;)rujq>5EWx8^PsnUmjB~~%DVcD0pw0M z@)noc7cqYgodA}EZ{Gu#o0vvBARtYyj(zECEF#%zmeMX@vmd32;i(U%EzJGp2}op1 zL9OUV)MF*oR+(k@O#lQvWIX-{{>Q-qJjlmZmq)A^wqOC6J7nVKU2N24e!1yxJ^m^4 zO$#k~iDogoq5IikF(NQ5qPxG#s-@X1Ds`mO51=05b}ipnNjf1|^#kk+Zcqj+Rr>+8 zV#QRklJV+~Bw-rMJrwAn!+3U4DJIU~6dfw1>nKw&AK`lcwr6VDX3hjE+rWf&Prdyz>2`5Hd~4pii;OUPfX zWo`;5LI(JaYuOkae%P{Fs|@5cooPJaZJ58KF?i9PC!DNd)9G8xub`J8#d|sL zVs~0KrM}TUmuXogD=ZwDTT^|wU>TKPE08N+nrP(h`1xLb+`_3tMKptPp8Ypz%Ji?d zH$OEg+e&l{-y->8z|rFx%QL#inL2$US2g3h@*y2D`0STaCNjU47b?mNp|YtuRA(6?^<+QS2;c6xmzbF!yWx#1|M)82mV5VY?B8Iie3QWB(dVh2AEa;(qdmAd#Hs45!6B;6X@)S->*$ z_VEv8mt^GO&|A}{`=jhcZmOqSZ;z4@!%7)r9VzDsl~);i;{==MH> z0TZ;1LK#qO9Y4PO)1p-`*Mg4e7;b*Bmt@;Sw{r{SB_^E`A)=e;qVT?oZxt=MaRcu} zKg}w8bJC?rvRc)D!<`U~+ugE)Lb&a(d}erGhOR%RcYS4TUw%ykcNa!X*AtrRExl10 zs?*@0GkYBl<4fWhV`_7gPRVs4a+r)ty6DYBvZ+a2$rD;v<}!pzR03)gQaYYoXxmC3 z7nXobBelMj``&_A+n^9L^kGXnksCQ(B*!y$!0Mi3J7%!YQ1{oNHqjZ8x^BYP>EzCV zT4~{|iWRh}AI*1%7z9M(nQUgSG)BPB_y(l|X)v;(*?Klg^kr5YsU|5eDRSzq|_jOTrmc}y4j5rq%RrTMJIdAcx7Ew7EGBRxA> zjnHh2n~`Wz^4&EP@`u8U`-zOhH^2_um1n%tXW5u%hp{CYp0bCRay&LOJeA_9_Kh*h zdDH)s6`TaJnp!Yur-?@6QR8l4K+pDdt6a{bP<=Bv=Dq|oWfr;7u{B^vD7ld|K6%y1 zMcQWO=>9d9K5yFL+b(4hV+ulwfeNC*wf3{PMs&&rY>h_fggm=|VA*hg+m1!NN2$3E zN20`|o>)OG8p;;&Ay<4DNzUEzu@~{NSuf9y=YTdl7^eD+Rp^Krb8-Lq!1!}d760O= z2yV0Y)0CVluwI1MEn7vP@jz(>8B4 zi?MTHsR9E1;-{D~m!sTlVK7^aP!_uTWE-spTzUQ4BhhgWI@~P?&T6k;{&E7u$kjF# zrfk>kfP1MYsz=TJk!VB4YP6hfX1VaayZo+V&faCTIU^Y{Fewx!w|0I7Q<_)B53yVi(cZt>B8U-!Gtz4^q@!O$!O{QW z72|$j@GA7(z@yYpf*2Z`%z#{%hc^~Qo%v9j?###8_5rw@El|;7g@;`waU$uW(gd=} z8^+&A(XN6K8Po5Z`&ZExRgiAMFTIH68uzt5u-B%|1zr15J?i%1J8#}~!DXwJ@D3bi zgxoL{`p&={4?BWcxd;BRLmJlq;%vRVfV6Kn@72AT=ENp?Gd)zzOCNjL!IT4mCF~)n)p#2@Db)?^h_1$?^zvWGOPS9 zjWJI(AOz1LJQzu$Tj8I{l92hvAAcevs7fwI1(0uRCTrxrH`@=1MF=cS;y!SF5bXQy zsG-#l*lkm@5<{i%cJ#p@Wt9%4TCHSmrnUjL&#Fe>b~bMy0tYOLMx_0dk#>D-zC00V z!HXsw&lQ&+VmxCu2*vZVGG}OyZS!k6_)pENl;Vx{AR>1|i0w99L!Yjq^E;jyL$&!Y zCnKjF2|@@K%bz0i6*atL&}*i78f_uUVV}0!Um$3veOeJ8MKX6}6xHaQWJ9w~V_iQX zc&q4jcPu@*Z-)5~;Ht%KcDOIO`x-WueG(@qV{PR9DE9J0ACz4A!2`~t2b@URFJ7w;J3OpP=*1lc8Kha~TJH@HC zVn7oT(;ZBOVH2_jYBzNpws3cscj9|~ffF)u#G?tu)27V547rfdnY&hesxQZ3-Q%WW zoJ)&tb{laVlt?4=Y&u8WbB(HaX@X0ajRZR#qe5pRM%igI(V`rzK9xF5b^FPPPXH&y zMaZ=DDivRq(%kE$@6dfjwavY^hld|cftb&L*xS8NBOZOy^oeh20v;rEY8sDmg@<(* ze5iGltDVe?6MH|2d>zucjuY%#C_Q@}@>BPKu*)Ux74x%iros%!0w$B}zYlH?eSlqiPlU(hER@fNQdR#pGwfqd#l33YD}jw`m6H?;7IUnZi@)F%grzF(22Z09 z)hPGZp0)JKFNWh7(uABH#2Cs(MyZ2g*WrTI(Knsl-czOOK|O+mDL2`-&FHm;*1u~w z*23i;XpyP=e|XznX|t>B&-R#%ah6WkO%#$-UUT_GXPO)3r45T1J=szNOhun}6VsA@ zAXKXS^?g<56g_y>-d;k&_BF?&D=XCwxRM(B6MxA;zGokiw?&Ye@_`_Z;~+#mF_g3Z z?G%Ne7&rR8joJxIFtncYAua5OPC@3{3#B!F64}*cEkp8{{^MSzB$B98@8v87f~IOM z$IY0^YYS<1BvcfFvV$*1*KjB2wNgSSV742h9EC@_7dU!ke*Ty%_;|`*R`m7apvV_H zkMS9je(+@Vp*z)l!cD-g@#$7bXLmB?#~MFkx@k0GPT~s}jqKpm&kKxsZ>jH_B+$QFmhxfG587~zZ>=XXzByj>xGg?i!E`6Qv~cIqRf=7%3F_M=sevT@@V&lAK-t? z#&1z<@a;)JylnxeSV4#RsYO}a4X-Pc%r=Av4mm8lR>K6IQ_99&f`v>EdblOb+y$mz zbvGlFrC?g_$Nd)X;{ufjK??s<~jSx|n%arVQF z=q$95SZ2QN=m65f1P)|A!ahu88_6|Qjkzb}>)=2(BjSg%@GLS6ddy^8Xa{s!PfRX= z@7d^Eph8ewySq&Bb$DN-JBB|U;K+xw%qOq3->&a>Q!qIOBJ9%SE8M5<#Jj&Xdv*v84o_%578K(r;k5=wVVszfmn05mn zYdhg%A`-#ECUB`Gnu7NZ$aeqCEy{3wmL%IJl6+tF-e-`bXUj>&?qBmr=w?yTb&W-o zCOJ)CMv+Ja-RbitE>?T31oReHbO;1_#_Y|3Q?o{EOA@A#mTeQ5)T>R^?2P(<@V^QGEI3YUp|UMrtc{$EbywWsu-9}Ea z2o{ZoWEbb;ElTynEIe z>&_Y}w9=Y8A8thcE^UjY^-e)=*Q+j3qGqnjJADtO_(NGsslgH=DiG; z!@52|`xJs>WPjuZn0PNeZrq=IoQzcWzEa`D4C8K{{49V+^RPC=;d`V=mi2_N9dOCV z+k!=GP_$i>P|O-AW0^1TrGvxlRR`$#++&XAb!A*}Tr{*E5q%ZPovjJhenn#SA~o9@ zC>knqj@EYQe2J!$2)5i^K{GcO5z(b}FYsX4Azm~LJPsxbiglQUUD7Y;6+swx_mV_~ z6ujFn7g@T$3l-PqcWmr}O2*!*pt|Y2@L>E=Ez`ACStEOj+9P8PJTggka`YY-0k`u5 z0%nW?goSibwm}stoQzyEck(T(MA5=GUW+$G_;N0PZqyki6T@{)D?l@$*YJj%Y)fAY zU0?FN1~1j@lJ9xpe#t7EXVi3M*EV^pv0D#m=d1Z_v82d&@U)2ptvYFIg7?62Xq4#S zelNm3o9Qr3Zm@F$@zr)jqp+)w*8&b(MSOgL`uZJFt0+G06{)dS5CpMu8d9J=(y_S-*0tp0R&YJA%dzTH-1*G2;!e)zNY*HD9obwpsHJ^QF$3N*8#jRJ$ zZnmKE^`U4-dsL=*lUF=sfGsTThI+l|rd_7lVl-RdmMB#>Ye>0MvFlz(cc;aC^Vt7~ znO18~HB}TN>cZ!`4DAXyUR!RW7U%Qh#d{P=@Y4a#nEWaO3UKe|;DRmB;n3IQGu)-` SBFFxSrmCc+_*UL3^nU^AXpVmX literal 0 HcmV?d00001 diff --git a/map/test/doc/tutorials/raster-reprojection.html b/map/test/doc/tutorials/raster-reprojection.html new file mode 100644 index 000000000..5f04051c7 --- /dev/null +++ b/map/test/doc/tutorials/raster-reprojection.html @@ -0,0 +1,187 @@ + + + + + + OpenLayers - Raster Reprojection + + + + + + + + + + + + + + + + + +
+

Raster Reprojection

+

OpenLayers has an ability to display raster data from WMS, WMTS, static images and many other sources in a different coordinate system than delivered from the server. +Transformation of the map projections of the image happens directly in a web browser. +The view in any Proj4js supported coordinate reference system is possible and previously incompatible layers can now be combined and overlaid.

+

Usage

+

The API usage is very simple. Just specify proper projection (e.g. using EPSG code) on ol/View:

+
import Map from 'ol/Map.js';
+import TileLayer from 'ol/layer/Tile.js';
+import TileWMS from 'ol/source/TileWMS.js';
+import View from 'ol/View.js';
+
+const map = new Map({
+  target: 'map',
+  view: new View({
+    projection: 'EPSG:3857', // here is the view projection
+    center: [0, 0],
+    zoom: 2,
+  }),
+  layers: [
+    new TileLayer({
+      source: new TileWMS({
+        projection: 'EPSG:4326', // here is the source projection
+        url: 'https://ahocevar.com/geoserver/wms',
+        params: {
+          'LAYERS': 'ne:NE1_HR_LC_SR_W_DR',
+        },
+      }),
+    }),
+  ],
+});
+
+

If a source (based on ol/source/TileImage or ol/source/Image) has a projection different from the current ol/View’s projection then the reprojection happens automatically under the hood.

+

Examples

+ +

Custom projection

+

The easiest way to use a custom projection is to add the Proj4js library to your project and then define the projection using a proj4 definition string. It can be installed with

+
npm install proj4
+
+

Following example shows definition of a British National Grid:

+
import proj4 from 'proj4';
+import {get as getProjection} from 'ol/proj.js';
+import {register} from 'ol/proj/proj4.js';
+
+proj4.defs('EPSG:27700', '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 ' +
+    '+x_0=400000 +y_0=-100000 +ellps=airy ' +
+    '+towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 ' +
+    '+units=m +no_defs');
+register(proj4);
+const proj27700 = getProjection('EPSG:27700');
+proj27700.setExtent([0, 0, 700000, 1300000]);
+
+

Change of the view projection

+

To switch the projection used to display the map you have to set a new ol/View with selected projection on the ol/Map:

+
map.setView(new View({
+  projection: 'EPSG:27700',
+  center: [400000, 650000],
+  zoom: 4,
+}));
+
+

TileGrid and Extents

+

When reprojection is needed, new tiles (in the target projection) are under the hood created from the original source tiles. +The TileGrid of the reprojected tiles is by default internally constructed using ol/tilegrid~getForProjection(projection). +The projection should have extent defined (see above) for this to work properly.

+

Alternatively, a custom target TileGrid can be constructed manually and set on the source instance using ol/source/TileImage~setTileGridForProjection(projection, tilegrid). +This TileGrid will then be used when reprojecting to the specified projection instead of creating the default one. +In certain cases, this can be used to optimize performance (by tweaking tile sizes) or visual quality (by specifying resolutions).

+

How it works

+

The reprojection process is based on triangles – the target raster is divided into a limited number of triangles with vertices transformed using ol/proj capabilities (proj4js is usually utilized to define custom transformations). +The reprojection of pixels inside the triangle is approximated with an affine transformation (with rendering hardware-accelerated by the canvas 2d context):

+How it works + +

This way we can support a wide range of projections from proj4js (or even custom transformation functions) on almost any hardware (with canvas 2d support) with a relatively small number of actual transformation calculations.

+

The precision of the reprojection is then limited by the number of triangles.

+

The reprojection process preserves transparency on the raster data supplied from the source (png or gif) and the gaps and no-data pixels generated by reprojection are automatically transparent.

+

Dynamic triangulation

+

The above image above shows a noticeable error (especially on the edges) when the original image (left; EPSG:27700) is transformed with only a limited number of triangles (right; EPSG:3857). +The error can be minimized by increasing the number of triangles used.

+

Since some transformations require a more detail triangulation network, the dynamic triangulation process automatically measures reprojection error and iteratively subdivides to meet a specific error threshold:

+Iterative triangulation + +

For debugging, rendering of the reprojection edges can be enabled by ol.source.TileImage#setRenderReprojectionEdges(true).

+

Advanced

+

Triangulation precision threshold

+

The default triangulation error threshold in pixels is given by ERROR_THRESHOLD (0.5 pixel). +In case a different threshold needs to be defined for different sources, the reprojectionErrorThreshold option can be passed when constructing the tile image source.

+

Limiting visibility of reprojected map by extent

+

The reprojection algorithm uses inverse transformation (from view projection to data projection). +For certain coordinate systems this can result in a "double occurrence" of the source data on a map. +For example, when reprojecting a map of Switzerland from EPSG:21781 to EPSG:3857, it is displayed twice: once at the proper place in Europe, but also in the Pacific Ocean near New Zealand, on the opposite side of the globe.

+Double occurrence of a reprojected map + +

Although this is mathematically correct behavior of the inverse transformation, visibility of the layer on multiple places is not expected by users. +A possible general solution would be to calculate the forward transformation for every vertex as well - but this would significantly decrease performance (especially for computationally expensive transformations).

+

Therefore a recommended workaround is to define a proper visibility extent on the ol.layer.Tile in the view projection. +Setting such a limit is demonstrated in the reprojection demo example.

+

Resolution calculation

+

When determining source tiles to load, the ideal source resolution needs to be calculated. +The ol/reproj~calculateSourceResolution(sourceProj, targetProj, targetCenter, targetResolution) function calculates the ideal value in order to achieve pixel mapping as close as possible to 1:1 during reprojection, which is then used to select proper zoom level from the source.

+

It is, however, generally not practical to use the same source zoom level for the whole target zoom level -- different projections can have significantly different resolutions in different parts of the world (e.g. polar regions in EPSG:3857 vs EPSG:4326) and enforcing a single resolution for the whole zoom level would result in some tiles being scaled up/down, possibly requiring a huge number of source tiles to be loaded. +Therefore, the resolution mapping is calculated separately for each reprojected tile (in the middle of the tile extent).

+ +
+ + + + diff --git a/map/test/download/index.html b/map/test/download/index.html new file mode 100644 index 000000000..3d2fe3e77 --- /dev/null +++ b/map/test/download/index.html @@ -0,0 +1,139 @@ + + + + + + OpenLayers - Get the Code + + + + + + + + + + + + + + + + + +
+
+
+

The ol package

+
+

+ The recommended way to use OpenLayers is to work with the ol package. +

+

+ To add OpenLayers to an existing project, install the latest with npm: +

npm install ol
+

+

+ If you are starting a new project from scratch, see the quick start docs for more information. +

+
+
+
+

Hosted build for development

+
+

+ If you want to try out OpenLayers without downloading anything (not recommended for production), include the following in the head of your html page: +

<script src="https://cdn.jsdelivr.net/npm/ol@v9.1.0/dist/ol.js"></script>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/ol@v9.1.0/ol.css">
+
+

+

+ The full build of the library does not include all dependencies: the geotiff and ol-mapbox-style packages are omitted. If you use these, you'll need to add additional script tags. +

+
+
+
+

Downloads for the v9.1.0 release

+
+
+
+ + + + + + + + + + + + +
ArchiveDescription
v9.1.0-site.zipIncludes examples and documentation.
v9.1.0-package.zipIncludes sources and the full build of the library.
+

+ See the v9.1.0 release page for a changelog and any special upgrade notes. +

+

+ For archives of previous releases, see the complete list of releases. +

+
+
+
+ +
+ + + + diff --git a/map/test/favicon.ico b/map/test/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bc4bafb6e9de8c412cc313e4451101bd5160ebc9 GIT binary patch literal 10205 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 z zfAL94j|Y?aBEL|xE?^%drKVahF!Z5Sut~QsC#Gh}yZLbQ!VGCduD&P$r-EpVeX3w6 z#$lzkQ!H=At1?0w+4FgQ^4op)wge1w4O||r4981<)3Wg3YvzPAJnQn13Z$ zU6xLnc0^%o&5EZ1*N&^vRi(eM)ff~AWf!p3*z0h&v!mAKzQ4)H_rBOazP~w0t2Ixg zVOI&e^YW{=o#8(b!$70RKQE1q4%_9LBWC38Nsr$}-dXxH%{&2Mm$F}$yD!@zZ{Rq(C$ZK zm+z^L&}VXC`+z)6ojFet3j{Z@&|V$T}#%&4WsL=M$owkOHrSCHzP(jJ=-e4l=M2t4YA5RO6UYE zAi*hvQrAYtq0A(IkI1uF!|QSJOWu~OZ+sivR{8=gjI=J*gen@|hfDfNF(Y63b+*_C z@~7p{8RKzt^N7l?@cCpr1Xs)7U7tm27Kb@f$2|&m3)rGWO+8yi5V~zTKUi-bJx3=! z@(n&Y40&w#k^tkA)pN&qR-;g=%`Wt?TVw7M)1LQMw~A%}8k?UVh867RehK}k_5vDP z;3!Xz)%(Y#B~_HHl!lhefUe|3kIC?x*xH%YGO%z{7WNfjfnA0H9ck9q)|P0+h8ZXY zbH93?RljHCOgI|J^TFgfi~=;6fa4*gO%U;Agh?3v zeZn@^;0-c<(3h<^BY^My*$w`Srg3#Lb2ctXxHTplSv}D%2F0Bs+ZX9KPf#ctLs}F1 zm5#IroxF-|_jk^1>QvkiDGXXSJr;jQoSh+?wb$u`2spbW2erHZ^M;`pdOHcYkWxNakyWtvmZ@C z_+d9?Fe&W7e#%ZTE1UV(E~T_wz428}wNp>TBkfU{FC&;DluV{0LL43-$foUBer!#H zn?fC6Tc(e?y5ucde?Alh3HOl%z9OoyD^ItvU8T%H`WG&2&2O7?=U@1QSRx<8%>wJr?~@RrUr>8^D8=ZNr&g4 zY2&8N7iHxY$%`T{N>(RFvwaueH*^43l!4kTYe`8wdM^&+MQ%alpj(}svQ*gXKWfAW z*lW|YeRw2)E)?Ny+{hkX5$8=#dC(V3Jvr>R#0I0kERcEdiNF0p=O7k8Tc@pnUTazC zqRKn!$HU^(yJt>zAo*@CQ9vqhDZvljG6Htq;*k=4&G8(RMC{}f3nt(*;s;w}+oEU~ zTIOXZ+83(m^ac@*t)XmOto8UO-(i?ZC+*qd=Cfb|P1`l&-EGMH%Y+vfv7RZGP) pQxB0P(#8K_R@;A%Ai5v0C-J2Qh+B<9F*EZ3s!DGZ%N0xz{|Eg>hi?D? literal 0 HcmV?d00001 diff --git a/map/test/index.html b/map/test/index.html new file mode 100644 index 000000000..754408934 --- /dev/null +++ b/map/test/index.html @@ -0,0 +1,204 @@ + + + + + + OpenLayers - Welcome + + + + + + + + + + + + + + + + + + +
+
+
+

A high-performance, feature-packed library for all your mapping needs.

+
+
+
+

Latest

+

OpenLayers v9.1.0 is here! Check out the docs and the examples to get started. The full distribution can be downloaded from the release page.

+
+
+
+

Overview

+
+
+
+

OpenLayers makes it easy to put a dynamic map in any web page. It can display map tiles, vector data and markers loaded from any source. OpenLayers has been developed to further the use of geographic information of all kinds. It is completely free, Open Source JavaScript, released under the 2-clause BSD License (also known as the FreeBSD).

+
+
+
+

Features

+
+
+
+

Tiled Layers

+ tiled layers +

Pull tiles from OSM, Bing, MapBox, Stadia Maps, and any other XYZ source you can find. OGC mapping services and untiled layers also supported.

+
+
+

Vector Layers

+ vector layers +

Render vector data from GeoJSON, TopoJSON, KML, GML, Mapbox vector tiles, and other formats.

+
+
+
+
+

Cutting Edge, Fast & Mobile Ready

+ mobile ready +

Leverages Canvas 2D, WebGL, and all the latest greatness from HTML5. Mobile support out of the box. Build lightweight custom profiles with just the components you need.

+
+
+

Easy to Customize and Extend

+ customizable +

Style your map controls with straight-forward CSS. Hook into different levels of the API or use 3rd party libraries to customize and extend functionality.

+
+
+
+

Learn More

+
+
+
+ +

Quick Start

+
+

Seen enough already? Go here to get started.

+
+
+ +

Get the Code

+
+

Get the latest release or dig through the archives.

+
+
+
+
+ +

Tutorials

+
+

Spend time learning the basics and graduate up to advanced mapping techniques.

+
+
+ +

Workshop

+
+

Want to learn OpenLayers hands-on? Get started with the workshop.

+
+
+
+
+ +

API Docs

+
+

Browse through the API docs for details on code usage.

+
+
+
+

Older versions

+
+

In case you are not ready (yet) for the latest version of OpenLayers, we provide links to selected resources of older major versions of the software.

+ +

Please consider upgrading to benefit from the latest features and bug fixes. Get better performance and usability for free by using recent versions of OpenLayers.

+
+
+
+

Get Involved

+
+ +
+ + + + + + diff --git a/map/test/main.js b/map/test/main.js new file mode 100644 index 000000000..189183b79 --- /dev/null +++ b/map/test/main.js @@ -0,0 +1,3 @@ +!function(){"use strict";class t{constructor(t){this.propagationStopped,this.defaultPrevented,this.type=t,this.target=null}preventDefault(){this.defaultPrevented=!0}stopPropagation(){this.propagationStopped=!0}}var e="propertychange";class i{constructor(){this.disposed=!1}dispose(){this.disposed||(this.disposed=!0,this.disposeInternal())}disposeInternal(){}}function n(t,e){return t>e?1:t0?r-1:r}return n-1}if(i>0){for(let i=1;i0)}removeEventListener(t,e){if(!this.listeners_)return;const i=this.listeners_[t];if(!i)return;const n=i.indexOf(e);-1!==n&&(this.pendingRemovals_&&t in this.pendingRemovals_?(i[n]=u,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t]))}}var m="change",y="error",_="contextmenu",x="click",v="dblclick",w="keydown",b="keypress",C="load",S="touchmove",E="wheel";function T(t,e,i,n,r){if(n&&n!==t&&(i=i.bind(n)),r){const n=i;i=function(){t.removeEventListener(e,i),n.apply(this,arguments)}}const s={target:t,type:e,listener:i};return t.addEventListener(e,i),s}function R(t,e,i,n){return T(t,e,i,n,!0)}function I(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),p(t))}class M extends f{constructor(){super(),this.on=this.onInternal,this.once=this.onceInternal,this.un=this.unInternal,this.revision_=0}changed(){++this.revision_,this.dispatchEvent(m)}getRevision(){return this.revision_}onInternal(t,e){if(Array.isArray(t)){const i=t.length,n=new Array(i);for(let r=0;r0;)this.pop()}extend(t){for(let e=0,i=t.length;ethis.getLength())throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e),this.array_.splice(t,0,e),this.updateLength_(),this.dispatchEvent(new bt(xt,e,t))}pop(){return this.removeAt(this.getLength()-1)}push(t){this.unique_&&this.assertUnique_(t);const e=this.getLength();return this.insertAt(e,t),this.getLength()}remove(t){const e=this.array_;for(let i=0,n=e.length;i=this.getLength())return;const e=this.array_[t];return this.array_.splice(t,1),this.updateLength_(),this.dispatchEvent(new bt(vt,e,t)),e}setAt(t,e){if(t>=this.getLength())return void this.insertAt(t,e);if(t<0)throw new Error("Index out of bounds: "+t);this.unique_&&this.assertUnique_(e,t);const i=this.array_[t];this.array_[t]=e,this.dispatchEvent(new bt(vt,i,t)),this.dispatchEvent(new bt(xt,e,t))}updateLength_(){this.set(wt,this.array_.length)}assertUnique_(t,e){for(let i=0,n=this.array_.length;i1?(i=r,n=s):l>0&&(i+=o*l,n+=a*l)}return zt(t,e,i,n)}function zt(t,e,i,n){const r=i-t,s=n-e;return r*r+s*s}function jt(t){return t*Math.PI/180}function Gt(t,e){const i=t%e;return i*e<0?i+e:i}function Nt(t,e,i){return t+i*(e-t)}function qt(t,e){const i=Math.pow(10,e);return Math.round(t*i)/i}function Wt(t,e){return Math.floor(qt(t,e))}function Xt(t,e){return Math.ceil(qt(t,e))}class Bt extends A{constructor(t){super(),this.on,this.once,this.un,this.background_=t.background;const e=Object.assign({},t);"object"==typeof t.properties&&(delete e.properties,Object.assign(e,t.properties)),e[St]=void 0!==t.opacity?t.opacity:1,At("number"==typeof e[St],"Layer opacity must be a number"),e[Et]=void 0===t.visible||t.visible,e[Rt]=t.zIndex,e[It]=void 0!==t.maxResolution?t.maxResolution:1/0,e[Mt]=void 0!==t.minResolution?t.minResolution:0,e[Ft]=void 0!==t.minZoom?t.minZoom:-1/0,e[kt]=void 0!==t.maxZoom?t.maxZoom:1/0,this.className_=void 0!==e.className?e.className:"ol-layer",delete e.className,this.setProperties(e),this.state_=null}getBackground(){return this.background_}getClassName(){return this.className_}getLayerState(t){const e=this.state_||{layer:this,managed:void 0===t||t},i=this.getZIndex();return e.opacity=Dt(Math.round(100*this.getOpacity())/100,0,1),e.visible=this.getVisible(),e.extent=this.getExtent(),e.zIndex=void 0!==i||e.managed?i:1/0,e.maxResolution=this.getMaxResolution(),e.minResolution=Math.max(this.getMinResolution(),0),e.minZoom=this.getMinZoom(),e.maxZoom=this.getMaxZoom(),this.state_=e,e}getLayersArray(t){return k()}getLayerStatesArray(t){return k()}getExtent(){return this.get(Tt)}getMaxResolution(){return this.get(It)}getMinResolution(){return this.get(Mt)}getMinZoom(){return this.get(Ft)}getMaxZoom(){return this.get(kt)}getOpacity(){return this.get(St)}getSourceState(){return k()}getVisible(){return this.get(Et)}getZIndex(){return this.get(Rt)}setBackground(t){this.background_=t,this.changed()}setExtent(t){this.set(Tt,t)}setMaxResolution(t){this.set(It,t)}setMinResolution(t){this.set(Mt,t)}setMaxZoom(t){this.set(kt,t)}setMinZoom(t){this.set(Ft,t)}setOpacity(t){At("number"==typeof t,"Layer opacity must be a number"),this.set(St,t)}setVisible(t){this.set(Et,t)}setZIndex(t){this.set(Rt,t)}disposeInternal(){this.state_&&(this.state_.layer=null,this.state_=null),super.disposeInternal()}}var Vt="prerender",Yt="postrender",Zt="precompose",Ut="postcompose",$t="rendercomplete",Kt=0,Ht=1,Jt={CENTER:"center",RESOLUTION:"resolution",ROTATION:"rotation"};const Qt=42,te=256,ee={radians:6370997/(2*Math.PI),degrees:2*Math.PI*6370997/360,ft:.3048,m:1,"us-ft":1200/3937};class ie{constructor(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit}canWrapX(){return this.canWrapX_}getCode(){return this.code_}getExtent(){return this.extent_}getUnits(){return this.units_}getMetersPerUnit(){return this.metersPerUnit_||ee[this.units_]}getWorldExtent(){return this.worldExtent_}getAxisOrientation(){return this.axisOrientation_}isGlobal(){return this.global_}setGlobal(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)}getDefaultTileGrid(){return this.defaultTileGrid_}setDefaultTileGrid(t){this.defaultTileGrid_=t}setExtent(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)}setWorldExtent(t){this.worldExtent_=t}setGetPointResolution(t){this.getPointResolutionFunc_=t}getPointResolutionFunc(){return this.getPointResolutionFunc_}}const ne=6378137,re=Math.PI*ne,se=[-re,-re,re,re],oe=[-180,-85,180,85],ae=ne*Math.log(Math.tan(Math.PI/2));class le extends ie{constructor(t){super({code:t,units:"m",extent:se,global:!0,worldExtent:oe,getPointResolution:function(t,e){return t/Math.cosh(e[1]/ne)}})}}const he=[new le("EPSG:3857"),new le("EPSG:102100"),new le("EPSG:102113"),new le("EPSG:900913"),new le("http://www.opengis.net/def/crs/EPSG/0/3857"),new le("http://www.opengis.net/gml/srs/epsg.xml#3857")];function ue(t,e,i){const n=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(n));for(let r=0;rae?i=ae:i<-ae&&(i=-ae),e[r+1]=i}return e}function ce(t,e,i){const n=t.length;i=i>1?i:2,void 0===e&&(e=i>2?t.slice():new Array(n));for(let r=0;rr&&(l|=xe.RIGHT),as&&(l|=xe.ABOVE),l===xe.UNKNOWN&&(l=xe.INTERSECTING),l}function Ie(){return[1/0,1/0,-1/0,-1/0]}function Me(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function ke(t){return Me(1/0,1/0,-1/0,-1/0,t)}function Fe(t,e){const i=t[0],n=t[1];return Me(i,n,i,n,e)}function Pe(t,e,i,n,r){return Oe(ke(r),t,e,i,n)}function Le(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function Ae(t,e){return e[0]t[2]&&(t[2]=e[2]),e[1]t[3]&&(t[3]=e[3]),t}function De(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function Oe(t,e,i,n,r){for(;ie[0]?n[0]=t[0]:n[0]=e[0],t[1]>e[1]?n[1]=t[1]:n[1]=e[1],t[2]=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function Je(t){return t[2]1){const e=t[2]-t[0],i=t[3]-t[1];for(let s=0;s=i[2])){const e=Ke(i),r=Math.floor((n[0]-i[0])/e)*e;t[0]-=r,t[2]-=r}return t}function ei(t,e){let i=!0;for(let n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function ii(t,e){const i=Math.cos(e),n=Math.sin(e),r=t[0]*i-t[1]*n,s=t[1]*i+t[0]*n;return t[0]=r,t[1]=s,t}function ni(t,e){if(e.canWrapX()){const i=Ke(e.getExtent()),n=function(t,e,i){const n=e.getExtent();let r=0;e.canWrapX()&&(t[0]n[2])&&(i=i||Ke(n),r=Math.floor((t[0]-n[0])/i));return r}(t,e,i);n&&(t[0]-=n*i)}return t}const ri=6371008.8;function si(t,e,i){i=i||ri;const n=jt(t[1]),r=jt(e[1]),s=(r-n)/2,o=jt(e[0]-t[0])/2,a=Math.sin(s)*Math.sin(s)+Math.sin(o)*Math.sin(o)*Math.cos(n)*Math.cos(r);return 2*i*Math.atan2(Math.sqrt(a),Math.sqrt(1-a))}function oi(...t){console.warn(...t)}let ai=!0;function li(t){ai=!(void 0===t||t)}function hi(t,e){if(void 0!==e)for(let i=0,n=t.length;i=-180&&t[0]<=180&&t[1]>=-90&&t[1]<=90&&(ai=!1,oi("Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.")),t}function Si(t,e){return t}function Ei(t,e){return t}var Ti,Ri,Ii;function Mi(t,e,i){return function(n,r,s,o,a){if(!n)return;if(!r&&!e)return n;const l=e?0:s[0]*r,h=e?0:s[1]*r,u=a?a[0]:0,c=a?a[1]:0;let d=t[0]+l/2+u,p=t[2]-l/2+u,g=t[1]+h/2+c,f=t[3]-h/2+c;d>p&&(d=(p+d)/2,p=d),g>f&&(g=(f+g)/2,f=g);let m=Dt(n[0],d,p),y=Dt(n[1],g,f);if(o&&i&&r){const t=30*r;m+=-t*Math.log(1+Math.max(0,d-n[0])/t)+t*Math.log(1+Math.max(0,n[0]-p)/t),y+=-t*Math.log(1+Math.max(0,g-n[1])/t)+t*Math.log(1+Math.max(0,n[1]-f)/t)}return[m,y]}}function ki(t){return t}function Fi(t,e,i,n){const r=Ke(e)/i[0],s=Ye(e)/i[1];return n?Math.min(t,Math.max(r,s)):Math.min(t,Math.min(r,s))}function Pi(t,e,i){let n=Math.min(t,e);return n*=Math.log(1+50*Math.max(0,t/e-1))/50+1,i&&(n=Math.max(n,i),n/=Math.log(1+50*Math.max(0,i/t-1))/50+1),Dt(n,i/2,2*e)}function Li(t,e,i,n,r){return i=void 0===i||i,function(s,o,a,l){if(void 0!==s){const o=n?Fi(t,n,a,r):t;return i&&l?Pi(s,o,e):Dt(s,e,o)}}}function Ai(t){if(void 0!==t)return 0}function Di(t){if(void 0!==t)return t}function Oi(t){return Math.pow(t,3)}function zi(t){return 1-Oi(1-t)}function ji(t){return 3*t*t-2*t*t*t}function Gi(t){return t}gi(he),gi(fe),Ti=he,Ri=ue,Ii=ce,fe.forEach((function(t){Ti.forEach((function(e){_e(t,e,Ri),_e(e,t,Ii)}))}));const Ni=new Array(6);function qi(t){return Xi(t,1,0,0,1,0,0)}function Wi(t,e){const i=t[0],n=t[1],r=t[2],s=t[3],o=t[4],a=t[5],l=e[0],h=e[1],u=e[2],c=e[3],d=e[4],p=e[5];return t[0]=i*l+r*h,t[1]=n*l+s*h,t[2]=i*u+r*c,t[3]=n*u+s*c,t[4]=i*d+r*p+o,t[5]=n*d+s*p+a,t}function Xi(t,e,i,n,r,s,o){return t[0]=e,t[1]=i,t[2]=n,t[3]=r,t[4]=s,t[5]=o,t}function Bi(t,e){const i=e[0],n=e[1];return e[0]=t[0]*i+t[2]*n+t[4],e[1]=t[1]*i+t[3]*n+t[5],e}function Vi(t,e,i){return Wi(t,Xi(Ni,e,0,0,i,0,0))}function Yi(t,e,i,n,r,s,o,a){const l=Math.sin(s),h=Math.cos(s);return t[0]=n*h,t[1]=r*l,t[2]=-n*l,t[3]=r*h,t[4]=o*n*h-a*n*l+e,t[5]=o*r*l+a*r*h+i,t}function Zi(t,e){const i=(n=e)[0]*n[3]-n[1]*n[2];var n;At(0!==i,"Transformation matrix cannot be inverted");const r=e[0],s=e[1],o=e[2],a=e[3],l=e[4],h=e[5];return t[0]=a/i,t[1]=-s/i,t[2]=-o/i,t[3]=r/i,t[4]=(o*h-a*l)/i,t[5]=-(r*h-s*l)/i,t}const Ui=[1e6,1e6,1e6,1e6,2,2];function $i(t){return"matrix("+t.map(((t,e)=>Math.round(t*Ui[e])/Ui[e])).join(", ")+")"}function Ki(t,e,i,n,r,s){s=s||[];let o=0;for(let a=e;a{if(!i)return this.getSimplifiedGeometry(e);const n=this.clone();return n.applyTransform(i),n.getSimplifiedGeometry(e)}))}simplifyTransformed(t,e){return this.simplifyTransformedInternal(this.getRevision(),t,e)}clone(){return k()}closestPointXY(t,e,i,n){return k()}containsXY(t,e){const i=this.getClosestPoint([t,e]);return i[0]===t&&i[1]===e}getClosestPoint(t,e){return e=e||[NaN,NaN],this.closestPointXY(t[0],t[1],e,1/0),e}intersectsCoordinate(t){return this.containsXY(t[0],t[1])}computeExtent(t){return k()}getExtent(t){if(this.extentRevision_!=this.getRevision()){const t=this.computeExtent(this.extent_);(isNaN(t[0])||isNaN(t[1]))&&ke(t),this.extentRevision_=this.getRevision()}return function(t,e){return e?(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e):t}(this.extent_,t)}rotate(t,e){k()}scale(t,e,i){k()}simplify(t){return this.getSimplifiedGeometry(t*t)}getSimplifiedGeometry(t){return k()}getType(){return k()}applyTransform(t){k()}intersectsExtent(t){return k()}translate(t,e){k()}transform(t,e){const i=di(t),n="tile-pixels"==i.getUnits()?function(t,n,r){const s=i.getExtent(),o=i.getWorldExtent(),a=Ye(o)/Ye(s);return Yi(Ji,o[0],o[3],a,-a,0,0,0),Ki(t,0,t.length,r,Ji,n),xi(i,e)(t,n,r)}:xi(i,e);return this.applyTransform(n),this}}class tn extends Qi{constructor(){super(),this.layout="XY",this.stride=2,this.flatCoordinates}computeExtent(t){return Pe(this.flatCoordinates,0,this.flatCoordinates.length,this.stride,t)}getCoordinates(){return k()}getFirstCoordinate(){return this.flatCoordinates.slice(0,this.stride)}getFlatCoordinates(){return this.flatCoordinates}getLastCoordinate(){return this.flatCoordinates.slice(this.flatCoordinates.length-this.stride)}getLayout(){return this.layout}getSimplifiedGeometry(t){if(this.simplifiedGeometryRevision!==this.getRevision()&&(this.simplifiedGeometryMaxMinSquaredTolerance=0,this.simplifiedGeometryRevision=this.getRevision()),t<0||0!==this.simplifiedGeometryMaxMinSquaredTolerance&&t<=this.simplifiedGeometryMaxMinSquaredTolerance)return this;const e=this.getSimplifiedGeometryInternal(t);return e.getFlatCoordinates().length1)c=i;else{if(d>0){for(let r=0;rr&&(r=a),s=i,o=n}return r}function on(t,e,i,n,r){for(let s=0,o=i.length;s0;){const i=h.pop(),s=h.pop();let o=0;const a=t[s],c=t[s+1],d=t[i],p=t[i+1];for(let e=s+n;eo&&(u=e,o=i)}o>r&&(l[(u-e)/n]=1,s+n0&&g>d)&&(p<0&&f0&&f>p)?(a=i,l=c):(s[o++]=a,s[o++]=l,h=a,u=l,a=i,l=c)}return s[o++]=a,s[o++]=l,o}function mn(t,e,i,n,r,s,o,a){for(let l=0,h=i.length;ls&&(i-a)*(s-l)-(r-a)*(n-l)>0&&o++:n<=s&&(i-a)*(s-l)-(r-a)*(n-l)<0&&o--,a=i,l=n}return 0!==o}function Tn(t,e,i,n,r,s){if(0===i.length)return!1;if(!En(t,e,i[0],n,r,s))return!1;for(let e=1,o=i.length;e_&&(u=(c+d)/2,Tn(t,e,i,r,u,f)&&(y=u,_=n)),c=d}return isNaN(y)&&(y=s[o]),a?(a.push(y,f,_),a):[y,f,_]}function In(t,e,i,n,r){let s=[];for(let o=0,a=i.length;o=r[0]&&s[2]<=r[2]||(s[1]>=r[1]&&s[3]<=r[3]||Mn(t,e,i,n,(function(t,e){return function(t,e,i){let n=!1;const r=Re(t,e),s=Re(t,i);if(r===xe.INTERSECTING||s===xe.INTERSECTING)n=!0;else{const o=t[0],a=t[1],l=t[2],h=t[3],u=e[0],c=e[1],d=i[0],p=i[1],g=(p-c)/(d-u);let f,m;s&xe.ABOVE&&!(r&xe.ABOVE)&&(f=d-(p-h)/g,n=f>=o&&f<=l),n||!(s&xe.RIGHT)||r&xe.RIGHT||(m=p-(d-l)*g,n=m>=a&&m<=h),n||!(s&xe.BELOW)||r&xe.BELOW||(f=d-(p-a)/g,n=f>=o&&f<=l),n||!(s&xe.LEFT)||r&xe.LEFT||(m=p-(d-o)*g,n=m>=a&&m<=h)}return n}(r,t,e)})))))}function Fn(t,e,i,n,r){return!!kn(t,e,i,n,r)||(!!En(t,e,i,n,r[0],r[1])||(!!En(t,e,i,n,r[0],r[3])||(!!En(t,e,i,n,r[2],r[1])||!!En(t,e,i,n,r[2],r[3]))))}function Pn(t,e,i,n,r){if(!Fn(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(let e=1,s=i.length;e0}function Dn(t,e,i,n,r){r=void 0!==r&&r;for(let s=0,o=i.length;sc&&p1&&"function"==typeof arguments[i-1]&&(e=arguments[i-1],--i);let n=0;for(;n0}getInteracting(){return this.hints_[Ht]>0}cancelAnimations(){let t;this.setHint(Kt,-this.hints_[Kt]);for(let e=0,i=this.animations_.length;e=0;--i){const n=this.animations_[i];let r=!0;for(let i=0,s=n.length;i0?o/s.duration:1;a>=1?(s.complete=!0,a=1):r=!1;const l=s.easing(a);if(s.sourceCenter){const t=s.sourceCenter[0],e=s.sourceCenter[1],i=s.targetCenter[0],n=s.targetCenter[1];this.nextCenter_=s.targetCenter;const r=t+l*(i-t),o=e+l*(n-e);this.targetCenter_=[r,o]}if(s.sourceResolution&&s.targetResolution){const t=1===l?s.targetResolution:s.sourceResolution+l*(s.targetResolution-s.sourceResolution);if(s.anchor){const e=this.getViewportSize_(this.getRotation()),i=this.constraints_.resolution(t,0,e,!0);this.targetCenter_=this.calculateCenterZoom(i,s.anchor)}this.nextResolution_=s.targetResolution,this.targetResolution_=t,this.applyTargetState_(!0)}if(void 0!==s.sourceRotation&&void 0!==s.targetRotation){const t=1===l?Gt(s.targetRotation+Math.PI,2*Math.PI)-Math.PI:s.sourceRotation+l*(s.targetRotation-s.sourceRotation);if(s.anchor){const e=this.constraints_.rotation(t,!0);this.targetCenter_=this.calculateCenterRotate(e,s.anchor)}this.nextRotation_=s.targetRotation,this.targetRotation_=t}if(this.applyTargetState_(!0),e=!0,!s.complete)break}if(r){this.animations_[i]=null,this.setHint(Kt,-1),this.nextCenter_=null,this.nextResolution_=NaN,this.nextRotation_=NaN;const t=n[0].callback;t&&Xn(t,!0)}}this.animations_=this.animations_.filter(Boolean),e&&void 0===this.updateAnimationKey_&&(this.updateAnimationKey_=requestAnimationFrame(this.updateAnimations_.bind(this)))}calculateCenterRotate(t,e){let i;const n=this.getCenterInternal();var r,s;return void 0!==n&&(i=[n[0]-e[0],n[1]-e[1]],ii(i,t-this.getRotation()),s=e,(r=i)[0]+=+s[0],r[1]+=+s[1]),i}calculateCenterZoom(t,e){let i;const n=this.getCenterInternal(),r=this.getResolution();if(void 0!==n&&void 0!==r){i=[e[0]-t*(e[0]-n[0])/r,e[1]-t*(e[1]-n[1])/r]}return i}getViewportSize_(t){const e=this.viewportSize_;if(t){const i=e[0],n=e[1];return[Math.abs(i*Math.cos(t))+Math.abs(n*Math.sin(t)),Math.abs(i*Math.sin(t))+Math.abs(n*Math.cos(t))]}return e}setViewportSize(t){this.viewportSize_=Array.isArray(t)?t.slice():[100,100],this.getAnimating()||this.resolveConstraints(0)}getCenter(){const t=this.getCenterInternal();return t?bi(t,this.getProjection()):t}getCenterInternal(){return this.get(Jt.CENTER)}getConstraints(){return this.constraints_}getConstrainResolution(){return this.get("constrainResolution")}getHints(t){return void 0!==t?(t[0]=this.hints_[0],t[1]=this.hints_[1],t):this.hints_.slice()}calculateExtent(t){return Si(this.calculateExtentInternal(t),this.getProjection())}calculateExtentInternal(t){t=t||this.getViewportSizeMinusPadding_();const e=this.getCenterInternal();At(e,"The view center is not defined");const i=this.getResolution();At(void 0!==i,"The view resolution is not defined");const n=this.getRotation();return At(void 0!==n,"The view rotation is not defined"),Be(e,i,n,t)}getMaxResolution(){return this.maxResolution_}getMinResolution(){return this.minResolution_}getMaxZoom(){return this.getZoomForResolution(this.minResolution_)}setMaxZoom(t){this.applyOptions_(this.getUpdatedOptions_({maxZoom:t}))}getMinZoom(){return this.getZoomForResolution(this.maxResolution_)}setMinZoom(t){this.applyOptions_(this.getUpdatedOptions_({minZoom:t}))}setConstrainResolution(t){this.applyOptions_(this.getUpdatedOptions_({constrainResolution:t}))}getProjection(){return this.projection_}getResolution(){return this.get(Jt.RESOLUTION)}getResolutions(){return this.resolutions_}getResolutionForExtent(t,e){return this.getResolutionForExtentInternal(Ei(t,this.getProjection()),e)}getResolutionForExtentInternal(t,e){e=e||this.getViewportSizeMinusPadding_();const i=Ke(t)/e[0],n=Ye(t)/e[1];return Math.max(i,n)}getResolutionForValueFunction(t){t=t||2;const e=this.getConstrainedResolution(this.maxResolution_),i=this.minResolution_,n=Math.log(e/i)/Math.log(t);return function(i){return e/Math.pow(t,i*n)}}getRotation(){return this.get(Jt.ROTATION)}getValueForResolutionFunction(t){const e=Math.log(t||2),i=this.getConstrainedResolution(this.maxResolution_),n=this.minResolution_,r=Math.log(i/n)/e;return function(t){return Math.log(i/t)/e/r}}getViewportSizeMinusPadding_(t){let e=this.getViewportSize_(t);const i=this.padding_;return i&&(e=[e[0]-i[1]-i[3],e[1]-i[0]-i[2]]),e}getState(){const t=this.getProjection(),e=this.getResolution(),i=this.getRotation();let n=this.getCenterInternal();const r=this.padding_;if(r){const t=this.getViewportSizeMinusPadding_();n=Vn(n,this.getViewportSize_(),[t[0]/2+r[3],t[1]/2+r[0]],e,i)}return{center:n.slice(0),projection:void 0!==t?t:null,resolution:e,nextCenter:this.nextCenter_,nextResolution:this.nextResolution_,nextRotation:this.nextRotation_,rotation:i,zoom:this.getZoom()}}getViewStateAndExtent(){return{viewState:this.getState(),extent:this.calculateExtent()}}getZoom(){let t;const e=this.getResolution();return void 0!==e&&(t=this.getZoomForResolution(e)),t}getZoomForResolution(t){let e,i,n=this.minZoom_||0;if(this.resolutions_){const s=r(this.resolutions_,t,1);n=s,e=this.resolutions_[s],i=s==this.resolutions_.length-1?2:e/this.resolutions_[s+1]}else e=this.maxResolution_,i=this.zoomFactor_;return n+Math.log(e/t)/Math.log(i)}getResolutionForZoom(t){if(this.resolutions_){if(this.resolutions_.length<=1)return 0;const e=Dt(Math.floor(t),0,this.resolutions_.length-2),i=this.resolutions_[e]/this.resolutions_[e+1];return this.resolutions_[e]/Math.pow(i,Dt(t-e,0,1))}return this.maxResolution_/Math.pow(this.zoomFactor_,t-this.minZoom_)}fit(t,e){let i;if(At(Array.isArray(t)||"function"==typeof t.getSimplifiedGeometry,"Invalid extent or geometry provided as `geometry`"),Array.isArray(t)){At(!Je(t),"Cannot fit empty extent provided as `geometry`");i=qn(Ei(t,this.getProjection()))}else if("Circle"===t.getType()){const e=Ei(t.getExtent(),this.getProjection());i=qn(e),i.rotate(this.getRotation(),We(e))}else i=t;this.fitInternal(i,e)}rotatedExtentForGeometry(t){const e=this.getRotation(),i=Math.cos(e),n=Math.sin(-e),r=t.getFlatCoordinates(),s=t.getStride();let o=1/0,a=1/0,l=-1/0,h=-1/0;for(let t=0,e=r.length;t=t.maxResolution)return!1;const n=e.zoom;return n>t.minZoom&&n<=t.maxZoom}var Zn=class extends Bt{constructor(t){const e=Object.assign({},t);delete e.source,super(e),this.on,this.once,this.un,this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,this.renderer_=null,this.sourceReady_=!1,this.rendered=!1,t.render&&(this.render=t.render),t.map&&this.setMap(t.map),this.addChangeListener(Pt,this.handleSourcePropertyChange_);const i=t.source?t.source:null;this.setSource(i)}getLayersArray(t){return(t=t||[]).push(this),t}getLayerStatesArray(t){return(t=t||[]).push(this.getLayerState()),t}getSource(){return this.get(Pt)||null}getRenderSource(){return this.getSource()}getSourceState(){const t=this.getSource();return t?t.getState():"undefined"}handleSourceChange_(){this.changed(),this.sourceReady_||"ready"!==this.getSource().getState()||(this.sourceReady_=!0,this.dispatchEvent("sourceready"))}handleSourcePropertyChange_(){this.sourceChangeKey_&&(I(this.sourceChangeKey_),this.sourceChangeKey_=null),this.sourceReady_=!1;const t=this.getSource();t&&(this.sourceChangeKey_=T(t,m,this.handleSourceChange_,this),"ready"===t.getState()&&(this.sourceReady_=!0,setTimeout((()=>{this.dispatchEvent("sourceready")}),0))),this.changed()}getFeatures(t){return this.renderer_?this.renderer_.getFeatures(t):Promise.resolve([])}getData(t){return this.renderer_&&this.rendered?this.renderer_.getData(t):null}isVisible(t){let e;const i=this.getMapInternal();let n;!t&&i&&(t=i.getView()),e=t instanceof Wn?{viewState:t.getState(),extent:t.calculateExtent()}:t,!e.layerStatesArray&&i&&(e.layerStatesArray=i.getLayerGroup().getLayerStatesArray()),n=e.layerStatesArray?e.layerStatesArray.find((t=>t.layer===this)):this.getLayerState();const r=this.getExtent();return Yn(n,e.viewState)&&(!r||He(r,e.extent))}getAttributions(t){if(!this.isVisible(t))return[];let e;const i=this.getSource();if(i&&(e=i.getAttributions()),!e)return[];let n=e(t instanceof Wn?t.getViewStateAndExtent():t);return Array.isArray(n)||(n=[n]),n}render(t,e){const i=this.getRenderer();return i.prepareFrame(t)?(this.rendered=!0,i.renderFrame(t,e)):null}unrender(){this.rendered=!1}getDeclutter(){}renderDeclutter(t,e){}renderDeferred(t){const e=this.getRenderer();e&&e.renderDeferred(t)}setMapInternal(t){t||this.unrender(),this.set(Lt,t)}getMapInternal(){return this.get(Lt)}setMap(t){this.mapPrecomposeKey_&&(I(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(I(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=T(t,Zt,(function(t){const e=t.frameState.layerStatesArray,i=this.getLayerState(!1);At(!e.some((function(t){return t.layer===i.layer})),"A layer can only be added to the map once. Use either `layer.setMap()` or `map.addLayer()`, not both."),e.push(i)}),this),this.mapRenderKey_=T(this,m,t.render,t),this.changed())}setSource(t){this.set(Pt,t)}getRenderer(){return this.renderer_||(this.renderer_=this.createRenderer()),this.renderer_}hasRenderer(){return!!this.renderer_}createRenderer(){return null}disposeInternal(){this.renderer_&&(this.renderer_.dispose(),delete this.renderer_),this.setSource(null),super.disposeInternal()}};function Un(t,e,i,n,r){$n(t,e,i||0,n||t.length-1,r||Hn)}function $n(t,e,i,n,r){for(;n>i;){if(n-i>600){var s=n-i+1,o=e-i+1,a=Math.log(s),l=.5*Math.exp(2*a/3),h=.5*Math.sqrt(a*l*(s-l)/s)*(o-s/2<0?-1:1);$n(t,e,Math.max(i,Math.floor(e-o*l/s+h)),Math.min(n,Math.floor(e+(s-o)*l/s+h)),r)}var u=t[e],c=i,d=n;for(Kn(t,i,e),r(t[n],u)>0&&Kn(t,i,n);c0;)d--}0===r(t[i],u)?Kn(t,i,d):Kn(t,++d,n),d<=e&&(i=d+1),e<=d&&(n=d-1)}}function Kn(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function Hn(t,e){return te?1:0}let Jn=class{constructor(t=9){this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(t){let e=this.data;const i=[];if(!hr(t,e))return i;const n=this.toBBox,r=[];for(;e;){for(let s=0;s=0&&r[e].children.length>this._maxEntries;)this._split(r,e),e--;this._adjustParentBBoxes(n,r,e)}_split(t,e){const i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);const s=this._chooseSplitIndex(i,r,n),o=ur(i.children.splice(s,i.children.length-s));o.height=i.height,o.leaf=i.leaf,tr(i,this.toBBox),tr(o,this.toBBox),e?t[e-1].children.push(o):this._splitRoot(i,o)}_splitRoot(t,e){this.data=ur([t,e]),this.data.height=t.height+1,this.data.leaf=!1,tr(this.data,this.toBBox)}_chooseSplitIndex(t,e,i){let n,r=1/0,s=1/0;for(let o=e;o<=i-e;o++){const e=er(t,0,o,this.toBBox),a=er(t,o,i,this.toBBox),l=ar(e,a),h=sr(e)+sr(a);l=e;n--){const e=t.children[n];ir(o,t.leaf?r(e):e),a+=or(o)}return a}_adjustParentBBoxes(t,e,i){for(let n=i;n>=0;n--)ir(e[n],t)}_condense(t){for(let e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children,e.splice(e.indexOf(t[i]),1)):this.clear():tr(t[i],this.toBBox)}};function Qn(t,e,i){if(!i)return e.indexOf(t);for(let n=0;n=t.minX&&e.maxY>=t.minY}function ur(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function cr(t,e,i,n,r){const s=[e,i];for(;s.length;){if((i=s.pop())-(e=s.pop())<=n)continue;const o=e+Math.ceil((i-e)/n/2)*n;Un(t,o,e,i,r),s.push(e,o,o,i)}}var dr={IDLE:0,LOADING:1,LOADED:2,ERROR:3,EMPTY:4};function pr(t){return t[0]>0&&t[1]>0}function gr(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}class fr{constructor(t){this.opacity_=t.opacity,this.rotateWithView_=t.rotateWithView,this.rotation_=t.rotation,this.scale_=t.scale,this.scaleArray_=gr(t.scale),this.displacement_=t.displacement,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new fr({opacity:this.getOpacity(),scale:Array.isArray(t)?t.slice():t,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getOpacity(){return this.opacity_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getDisplacement(){return this.displacement_}getDeclutterMode(){return this.declutterMode_}getAnchor(){return k()}getImage(t){return k()}getHitDetectionImage(){return k()}getPixelRatio(t){return 1}getImageState(){return k()}getImageSize(){return k()}getOrigin(){return k()}getSize(){return k()}setDisplacement(t){this.displacement_=t}setOpacity(t){this.opacity_=t}setRotateWithView(t){this.rotateWithView_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=gr(t)}listenImageChange(t){k()}load(){k()}unlistenImageChange(t){k()}ready(){return Promise.resolve()}}var mr={name:"rgb",min:[0,0,0],max:[255,255,255],channel:["red","green","blue"],alias:["RGB"]},yr={name:"xyz",min:[0,0,0],channel:["X","Y","Z"],alias:["XYZ","ciexyz","cie1931"],whitepoint:{2:{A:[109.85,100,35.585],C:[98.074,100,118.232],D50:[96.422,100,82.521],D55:[95.682,100,92.149],D65:[95.045592705167,100,108.9057750759878],D75:[94.972,100,122.638],F2:[99.187,100,67.395],F7:[95.044,100,108.755],F11:[100.966,100,64.37],E:[100,100,100]},10:{A:[111.144,100,35.2],C:[97.285,100,116.145],D50:[96.72,100,81.427],D55:[95.799,100,90.926],D65:[94.811,100,107.304],D75:[94.416,100,120.641],F2:[103.28,100,69.026],F7:[95.792,100,107.687],F11:[103.866,100,65.627],E:[100,100,100]}}};yr.max=yr.whitepoint[2].D65,yr.rgb=function(t,e){e=e||yr.whitepoint[2].E;var i,n,r,s=t[0]/e[0],o=t[1]/e[1],a=t[2]/e[2];return n=-.96924363628087*s+1.87596750150772*o+.041555057407175*a,r=.055630079696993*s+-.20397695888897*o+1.056971514242878*a,i=(i=3.240969941904521*s+-1.537383177570093*o+-.498610760293*a)>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:r*=12.92,[255*(i=Math.min(Math.max(0,i),1)),255*(n=Math.min(Math.max(0,n),1)),255*(r=Math.min(Math.max(0,r),1))]},mr.xyz=function(t,e){var i=t[0]/255,n=t[1]/255,r=t[2]/255,s=.21263900587151*(i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92)+.71516867876775*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.072192315360733*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92),o=.019330818715591*i+.11919477979462*n+.95053215224966*r;return[(.41239079926595*i+.35758433938387*n+.18048078840183*r)*(e=e||yr.whitepoint[2].E)[0],s*e[1],o*e[2]]};var _r=yr,xr={name:"luv",min:[0,-134,-140],max:[100,224,122],channel:["lightness","u","v"],alias:["LUV","cieluv","cie1976"],xyz:function(t,e,i){var n,r,s,o,a,l,h,u,c;if(s=t[0],o=t[1],a=t[2],0===s)return[0,0,0];return e=e||"D65",i=i||2,n=o/(13*s)+4*(h=_r.whitepoint[i][e][0])/(h+15*(u=_r.whitepoint[i][e][1])+3*(c=_r.whitepoint[i][e][2]))||0,r=a/(13*s)+9*u/(h+15*u+3*c)||0,[9*(l=s>8?u*Math.pow((s+16)/116,3):u*s*.0011070564598794539)*n/(4*r)||0,l,l*(12-3*n-20*r)/(4*r)||0]}};_r.luv=function(t,e,i){var n,r,s,o,a,l,h,u,c,d,p;e=e||"D65",i=i||2,d=4*(h=_r.whitepoint[i][e][0])/(h+15*(u=_r.whitepoint[i][e][1])+3*(c=_r.whitepoint[i][e][2])),p=9*u/(h+15*u+3*c),n=4*(o=t[0])/(o+15*(a=t[1])+3*(l=t[2]))||0,r=9*a/(o+15*a+3*l)||0;var g=a/u;return[s=g<=.008856451679035631?903.2962962962961*g:116*Math.pow(g,1/3)-16,13*s*(n-d),13*s*(r-p)]};var vr={name:"lchuv",channel:["lightness","chroma","hue"],alias:["LCHuv","cielchuv"],min:[0,0,0],max:[100,100,360],luv:function(t){var e,i=t[0],n=t[1];return e=t[2]/360*2*Math.PI,[i,n*Math.cos(e),n*Math.sin(e)]},xyz:function(t){return xr.xyz(vr.luv(t))}},wr=vr;function br(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}xr.lchuv=function(t){var e=t[0],i=t[1],n=t[2],r=Math.sqrt(i*i+n*n),s=360*Math.atan2(n,i)/2/Math.PI;return s<0&&(s+=360),[e,r,s]},_r.lchuv=function(t){return xr.lchuv(_r.luv(t))};var Cr=br({aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}),Sr={red:0,orange:60,yellow:120,green:180,blue:240,purple:300};var Er={name:"hsl",min:[0,0,0],max:[360,100,100],channel:["hue","saturation","lightness"],alias:["HSL"],rgb:function(t){var e,i,n,r,s,o=t[0]/360,a=t[1]/100,l=t[2]/100,h=0;if(0===a)return[s=255*l,s,s];for(e=2*l-(i=l<.5?l*(1+a):l+a-l*a),r=[0,0,0];h<3;)(n=o+1/3*-(h-1))<0?n++:n>1&&n--,s=6*n<1?e+6*(i-e)*n:2*n<1?i:3*n<2?e+(i-e)*(2/3-n)*6:e,r[h++]=255*s;return r}};function Tr(t){var e;Array.isArray(t)&&t.raw&&(t=String.raw(...arguments)),t instanceof Number&&(t=+t);var i=function(t){var e,i,n=[],r=1;if("number"==typeof t)return{space:"rgb",values:[t>>>16,(65280&t)>>>8,255&t],alpha:1};if("number"==typeof t)return{space:"rgb",values:[t>>>16,(65280&t)>>>8,255&t],alpha:1};if(t=String(t).toLowerCase(),Cr[t])n=Cr[t].slice(),i="rgb";else if("transparent"===t)r=0,i="rgb",n=[0,0,0];else if("#"===t[0]){var s=t.slice(1),o=s.length;r=1,o<=4?(n=[parseInt(s[0]+s[0],16),parseInt(s[1]+s[1],16),parseInt(s[2]+s[2],16)],4===o&&(r=parseInt(s[3]+s[3],16)/255)):(n=[parseInt(s[0]+s[1],16),parseInt(s[2]+s[3],16),parseInt(s[4]+s[5],16)],8===o&&(r=parseInt(s[6]+s[7],16)/255)),n[0]||(n[0]=0),n[1]||(n[1]=0),n[2]||(n[2]=0),i="rgb"}else if(e=/^((?:rgba?|hs[lvb]a?|hwba?|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms|oklch|oklab|color))\s*\(([^\)]*)\)/.exec(t)){var a=e[1],l="cmyk"===(i=a.replace(/a$/,""))?4:"gray"===i?1:3;n=e[2].trim().split(/\s*[,\/]\s*|\s+/),"color"===i&&(i=n.shift()),r=(n=n.map((function(t,e){if("%"===t[t.length-1])return t=parseFloat(t)/100,3===e?t:"rgb"===i?255*t:"h"===i[0]?100*t:"l"!==i[0]||e?"lab"===i?125*t:"lch"===i?e<2?150*t:360*t:"o"!==i[0]||e?"oklab"===i?.4*t:"oklch"===i?e<2?.4*t:360*t:t:t:100*t;if("h"===i[e]||2===e&&"h"===i[i.length-1]){if(void 0!==Sr[t])return Sr[t];if(t.endsWith("deg"))return parseFloat(t);if(t.endsWith("turn"))return 360*parseFloat(t);if(t.endsWith("grad"))return 360*parseFloat(t)/400;if(t.endsWith("rad"))return 180*parseFloat(t)/Math.PI}return"none"===t?0:parseFloat(t)}))).length>l?n.pop():1}else/[0-9](?:\s|\/|,)/.test(t)&&(n=t.match(/([0-9]+)/g).map((function(t){return parseFloat(t)})),i=t.match(/([a-z])/gi)?.join("")?.toLowerCase()||"rgb");return{space:i,values:n,alpha:r}}(t);if(!i.space)return[];const n="h"===i.space[0]?Er.min:mr.min,r="h"===i.space[0]?Er.max:mr.max;return(e=Array(3))[0]=Math.min(Math.max(i.values[0],n[0]),r[0]),e[1]=Math.min(Math.max(i.values[1],n[1]),r[1]),e[2]=Math.min(Math.max(i.values[2],n[2]),r[2]),"h"===i.space[0]&&(e=Er.rgb(e)),e.push(Math.min(Math.max(i.alpha,0),1)),e}mr.hsl=function(t){var e,i,n=t[0]/255,r=t[1]/255,s=t[2]/255,o=Math.min(n,r,s),a=Math.max(n,r,s),l=a-o;return a===o?e=0:n===a?e=(r-s)/l:r===a?e=2+(s-n)/l:s===a&&(e=4+(n-r)/l),(e=Math.min(60*e,360))<0&&(e+=360),i=(o+a)/2,[e,100*(a===o?0:i<=.5?l/(a+o):l/(2-a-o)),100*i]};const Rr=1024,Ir={};let Mr=0;function kr(t){if(4===t.length)return t;const e=t.slice();return e[3]=1,e}function Fr(t){const e=_r.lchuv(mr.xyz(t));return e[3]=t[3],e}function Pr(t){if(Ir.hasOwnProperty(t))return Ir[t];if(Mr>=Rr){let t=0;for(const e in Ir)0==(3&t++)&&(delete Ir[e],--Mr)}const e=Tr(t);if(4!==e.length)throw new Error('Failed to parse "'+t+'" as color');for(const i of e)if(isNaN(i))throw new Error('Failed to parse "'+t+'" as color');return Ar(e),Ir[t]=e,++Mr,e}function Lr(t){return Array.isArray(t)?t:Pr(t)}function Ar(t){return t[0]=Dt(t[0]+.5|0,0,255),t[1]=Dt(t[1]+.5|0,0,255),t[2]=Dt(t[2]+.5|0,0,255),t[3]=Dt(t[3],0,1),t}function Dr(t){let e=t[0];e!=(0|e)&&(e=e+.5|0);let i=t[1];i!=(0|i)&&(i=i+.5|0);let n=t[2];n!=(0|n)&&(n=n+.5|0);return"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:Math.round(1e3*t[3])/1e3)+")"}class Or extends f{constructor(t,e,i,n){super(),this.extent=t,this.pixelRatio_=i,this.resolution=e,this.state="function"==typeof n?dr.IDLE:n,this.image_=null,this.loader="function"==typeof n?n:null}changed(){this.dispatchEvent(m)}getExtent(){return this.extent}getImage(){return this.image_}getPixelRatio(){return this.pixelRatio_}getResolution(){return this.resolution}getState(){return this.state}load(){if(this.state==dr.IDLE&&this.loader){this.state=dr.LOADING,this.changed();const t=this.getResolution(),e=Array.isArray(t)?t[0]:t;d((()=>this.loader(this.getExtent(),e,this.getPixelRatio()))).then((t=>{"image"in t&&(this.image_=t.image),"extent"in t&&(this.extent=t.extent),"resolution"in t&&(this.resolution=t.resolution),"pixelRatio"in t&&(this.pixelRatio_=t.pixelRatio),(t instanceof HTMLImageElement||t instanceof ImageBitmap||t instanceof HTMLCanvasElement||t instanceof HTMLVideoElement)&&(this.image_=t),this.state=dr.LOADED})).catch((t=>{this.state=dr.ERROR,console.error(t)})).finally((()=>this.changed()))}}setImage(t){this.image_=t}setResolution(t){this.resolution=t}}function zr(t,e){return e&&(t.src=e),t.src&&Y?new Promise(((e,i)=>t.decode().then((()=>e(t))).catch((n=>t.complete&&t.width?e(t):i(n))))):function(t,e){return new Promise(((i,n)=>{function r(){o(),i(t)}function s(){o(),n(new Error("Image load error"))}function o(){t.removeEventListener("load",r),t.removeEventListener("error",s)}t.addEventListener("load",r),t.addEventListener("error",s),e&&(t.src=e)}))}(t)}function jr(t,e,i){return e+":"+t+":"+(i?Lr(i):"null")}const Gr=new class{constructor(){this.cache_={},this.patternCache_={},this.cacheSize_=0,this.maxCacheSize_=32}clear(){this.cache_={},this.patternCache_={},this.cacheSize_=0}canExpireCache(){return this.cacheSize_>this.maxCacheSize_}expire(){if(this.canExpireCache()){let t=0;for(const e in this.cache_){const i=this.cache_[e];0!=(3&t++)||i.hasListener()||(delete this.cache_[e],delete this.patternCache_[e],--this.cacheSize_)}}}get(t,e,i){const n=jr(t,e,i);return n in this.cache_?this.cache_[n]:null}getPattern(t,e,i){const n=jr(t,e,i);return n in this.patternCache_?this.patternCache_[n]:null}set(t,e,i,n,r){const s=jr(t,e,i),o=s in this.cache_;this.cache_[s]=n,r&&(n.getImageState()===dr.IDLE&&n.load(),n.getImageState()===dr.LOADING?n.ready().then((()=>{this.patternCache_[s]=K().createPattern(n.getImage(1),"repeat")})):this.patternCache_[s]=K().createPattern(n.getImage(1),"repeat")),o||++this.cacheSize_}setSize(t){this.maxCacheSize_=t,this.expire()}};let Nr=null;class qr extends f{constructor(t,e,i,n,r){super(),this.hitDetectionImage_=null,this.image_=t,this.crossOrigin_=i,this.canvas_={},this.color_=r,this.imageState_=void 0===n?dr.IDLE:n,this.size_=t&&t.width&&t.height?[t.width,t.height]:null,this.src_=e,this.tainted_,this.ready_=null}initializeImage_(){this.image_=new Image,null!==this.crossOrigin_&&(this.image_.crossOrigin=this.crossOrigin_)}isTainted_(){if(void 0===this.tainted_&&this.imageState_===dr.LOADED){Nr||(Nr=U(1,1,void 0,{willReadFrequently:!0})),Nr.drawImage(this.image_,0,0);try{Nr.getImageData(0,0,1,1),this.tainted_=!1}catch(t){Nr=null,this.tainted_=!0}}return!0===this.tainted_}dispatchChangeEvent_(){this.dispatchEvent(m)}handleImageError_(){this.imageState_=dr.ERROR,this.dispatchChangeEvent_()}handleImageLoad_(){this.imageState_=dr.LOADED,this.size_=[this.image_.width,this.image_.height],this.dispatchChangeEvent_()}getImage(t){return this.image_||this.initializeImage_(),this.replaceColor_(t),this.canvas_[t]?this.canvas_[t]:this.image_}getPixelRatio(t){return this.replaceColor_(t),this.canvas_[t]?t:1}getImageState(){return this.imageState_}getHitDetectionImage(){if(this.image_||this.initializeImage_(),!this.hitDetectionImage_)if(this.isTainted_()){const t=this.size_[0],e=this.size_[1],i=U(t,e);i.fillRect(0,0,t,e),this.hitDetectionImage_=i.canvas}else this.hitDetectionImage_=this.image_;return this.hitDetectionImage_}getSize(){return this.size_}getSrc(){return this.src_}load(){if(this.imageState_===dr.IDLE){this.image_||this.initializeImage_(),this.imageState_=dr.LOADING;try{void 0!==this.src_&&(this.image_.src=this.src_)}catch(t){this.handleImageError_()}this.image_ instanceof HTMLImageElement&&zr(this.image_,this.src_).then((t=>{this.image_=t,this.handleImageLoad_()})).catch(this.handleImageError_.bind(this))}}replaceColor_(t){if(!this.color_||this.canvas_[t]||this.imageState_!==dr.LOADED)return;const e=this.image_,i=document.createElement("canvas");i.width=Math.ceil(e.width*t),i.height=Math.ceil(e.height*t);const n=i.getContext("2d");n.scale(t,t),n.drawImage(e,0,0),n.globalCompositeOperation="multiply",n.fillStyle=function(t){return"string"==typeof t?t:Dr(t)}(this.color_),n.fillRect(0,0,i.width/t,i.height/t),n.globalCompositeOperation="destination-in",n.drawImage(e,0,0),this.canvas_[t]=i}ready(){return this.ready_||(this.ready_=new Promise((t=>{this.imageState_===dr.LOADED||this.imageState_===dr.ERROR?t():this.addEventListener(m,(function e(){this.imageState_!==dr.LOADED&&this.imageState_!==dr.ERROR||(this.removeEventListener(m,e),t())}))}))),this.ready_}}function Wr(t,e,i,n,r,s){let o=void 0===e?void 0:Gr.get(e,i,r);return o||(o=new qr(t,t instanceof HTMLImageElement?t.src||void 0:e,i,n,r),Gr.set(e,i,r,o,s)),s&&o&&!Gr.getPattern(e,i,r)&&Gr.set(e,i,r,o,s),o}function Xr(t){return t?Array.isArray(t)?Dr(t):"object"==typeof t&&"src"in t?function(t){if(!t.offset||!t.size)return Gr.getPattern(t.src,"anonymous",t.color);const e=t.src+":"+t.offset,i=Gr.getPattern(e,void 0,t.color);if(i)return i;const n=Gr.get(t.src,"anonymous",null);if(n.getImageState()!==dr.LOADED)return null;const r=U(t.size[0],t.size[1]);return r.drawImage(n.getImage(1),t.offset[0],t.offset[1],t.size[0],t.size[1],0,0,t.size[0],t.size[1]),Wr(r.canvas,e,void 0,dr.LOADED,t.color,!0),Gr.getPattern(e,void 0,t.color)}(t):t:null}const Br="10px sans-serif",Vr="#000",Yr="round",Zr=[],Ur="round",$r="#000",Kr="center",Hr="middle",Jr=[0,0,0,0],Qr=new A;let ts,es=null;const is={},ns=function(){const t="32px ",e=["monospace","serif"],i=e.length,n="wmytzilWMYTZIL@#/&?$%10";let r,s;function o(r,o,a){let l=!0;for(let h=0;hMath.max(e,os(t,i))),0);return i[e]=n,n}function ls(t,e,i,n,r,s,o,a,l,h,u){t.save(),1!==i&&(void 0===t.globalAlpha?t.globalAlpha=t=>t.globalAlpha*=i:t.globalAlpha*=i),e&&t.transform.apply(t,e),n.contextInstructions?(t.translate(l,h),t.scale(u[0],u[1]),function(t,e){const i=t.contextInstructions;for(let t=0,n=i.length;tthis.imageState_=dr.LOADED)),this.render()}clone(){const t=this.getScale(),e=new hs({fill:this.getFill()?this.getFill().clone():void 0,points:this.getPoints(),radius:this.getRadius(),radius2:this.getRadius2(),angle:this.getAngle(),stroke:this.getStroke()?this.getStroke().clone():void 0,rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()});return e.setOpacity(this.getOpacity()),e}getAnchor(){const t=this.size_,e=this.getDisplacement(),i=this.getScaleArray();return[t[0]/2-e[0]/i[0],t[1]/2+e[1]/i[1]]}getAngle(){return this.angle_}getFill(){return this.fill_}setFill(t){this.fill_=t,this.render()}getHitDetectionImage(){return this.hitDetectionCanvas_||(this.hitDetectionCanvas_=this.createHitDetectionCanvas_(this.renderOptions_)),this.hitDetectionCanvas_}getImage(t){let e=this.canvases_[t];if(!e){const i=this.renderOptions_,n=U(i.size*t,i.size*t);this.draw_(i,n,t),e=n.canvas,this.canvases_[t]=e}return e}getPixelRatio(t){return t}getImageSize(){return this.size_}getImageState(){return this.imageState_}getOrigin(){return this.origin_}getPoints(){return this.points_}getRadius(){return this.radius_}getRadius2(){return this.radius2_}getSize(){return this.size_}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t,this.render()}listenImageChange(t){}load(){}unlistenImageChange(t){}calculateLineJoinSize_(t,e,i){if(0===e||this.points_===1/0||"bevel"!==t&&"miter"!==t)return e;let n=this.radius_,r=void 0===this.radius2_?n:this.radius2_;if(n{this.patternImage_=null})),e.getImageState()===dr.IDLE&&e.load(),e.getImageState()===dr.LOADING&&(this.patternImage_=e)}this.color_=t}loading(){return!!this.patternImage_}ready(){return this.patternImage_?this.patternImage_.ready():Promise.resolve()}}class ds{constructor(t){t=t||{},this.color_=void 0!==t.color?t.color:null,this.lineCap_=t.lineCap,this.lineDash_=void 0!==t.lineDash?t.lineDash:null,this.lineDashOffset_=t.lineDashOffset,this.lineJoin_=t.lineJoin,this.miterLimit_=t.miterLimit,this.width_=t.width}clone(){const t=this.getColor();return new ds({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})}getColor(){return this.color_}getLineCap(){return this.lineCap_}getLineDash(){return this.lineDash_}getLineDashOffset(){return this.lineDashOffset_}getLineJoin(){return this.lineJoin_}getMiterLimit(){return this.miterLimit_}getWidth(){return this.width_}setColor(t){this.color_=t}setLineCap(t){this.lineCap_=t}setLineDash(t){this.lineDash_=t}setLineDashOffset(t){this.lineDashOffset_=t}setLineJoin(t){this.lineJoin_=t}setMiterLimit(t){this.miterLimit_=t}setWidth(t){this.width_=t}}class ps{constructor(t){t=t||{},this.geometry_=null,this.geometryFunction_=ms,void 0!==t.geometry&&this.setGeometry(t.geometry),this.fill_=void 0!==t.fill?t.fill:null,this.image_=void 0!==t.image?t.image:null,this.renderer_=void 0!==t.renderer?t.renderer:null,this.hitDetectionRenderer_=void 0!==t.hitDetectionRenderer?t.hitDetectionRenderer:null,this.stroke_=void 0!==t.stroke?t.stroke:null,this.text_=void 0!==t.text?t.text:null,this.zIndex_=t.zIndex}clone(){let t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new ps({geometry:t??void 0,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,renderer:this.getRenderer()??void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})}getRenderer(){return this.renderer_}setRenderer(t){this.renderer_=t}setHitDetectionRenderer(t){this.hitDetectionRenderer_=t}getHitDetectionRenderer(){return this.hitDetectionRenderer_}getGeometry(){return this.geometry_}getGeometryFunction(){return this.geometryFunction_}getFill(){return this.fill_}setFill(t){this.fill_=t}getImage(){return this.image_}setImage(t){this.image_=t}getStroke(){return this.stroke_}setStroke(t){this.stroke_=t}getText(){return this.text_}setText(t){this.text_=t}getZIndex(){return this.zIndex_}setGeometry(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=ms,this.geometry_=t}setZIndex(t){this.zIndex_=t}}let gs=null;function fs(t,e){if(!gs){const t=new cs({color:"rgba(255,255,255,0.4)"}),e=new ds({color:"#3399CC",width:1.25});gs=[new ps({image:new us({fill:t,stroke:e,radius:5}),fill:t,stroke:e})]}return gs}function ms(t){return t.getGeometry()}var ys=ps;function _s(t,e,i,n){return void 0!==i&&void 0!==n?[i/t,n/e]:void 0!==i?i/t:void 0!==n?n/e:1}class xs extends fr{constructor(t){const e=void 0!==(t=t||{}).opacity?t.opacity:1,i=void 0!==t.rotation?t.rotation:0,n=void 0!==t.scale?t.scale:1,r=void 0!==t.rotateWithView&&t.rotateWithView;super({opacity:e,rotation:i,scale:n,displacement:void 0!==t.displacement?t.displacement:[0,0],rotateWithView:r,declutterMode:t.declutterMode}),this.anchor_=void 0!==t.anchor?t.anchor:[.5,.5],this.normalizedAnchor_=null,this.anchorOrigin_=void 0!==t.anchorOrigin?t.anchorOrigin:"top-left",this.anchorXUnits_=void 0!==t.anchorXUnits?t.anchorXUnits:"fraction",this.anchorYUnits_=void 0!==t.anchorYUnits?t.anchorYUnits:"fraction",this.crossOrigin_=void 0!==t.crossOrigin?t.crossOrigin:null;const s=void 0!==t.img?t.img:null;let o,a=t.src;if(At(!(void 0!==a&&s),"`image` and `src` cannot be provided at the same time"),void 0!==a&&0!==a.length||!s||(a=s.src||P(s)),At(void 0!==a&&a.length>0,"A defined and non-empty `src` or `image` must be provided"),At(!((void 0!==t.width||void 0!==t.height)&&void 0!==t.scale),"`width` or `height` cannot be provided together with `scale`"),void 0!==t.src?o=dr.IDLE:void 0!==s&&(o=s instanceof HTMLImageElement?s.complete?s.src?dr.LOADED:dr.IDLE:dr.LOADING:dr.LOADED),this.color_=void 0!==t.color?Lr(t.color):null,this.iconImage_=Wr(s,a,this.crossOrigin_,o,this.color_),this.offset_=void 0!==t.offset?t.offset:[0,0],this.offsetOrigin_=void 0!==t.offsetOrigin?t.offsetOrigin:"top-left",this.origin_=null,this.size_=void 0!==t.size?t.size:null,void 0!==t.width||void 0!==t.height){let e,i;if(t.size)[e,i]=t.size;else{const n=this.getImage(1);if(n.width&&n.height)e=n.width,i=n.height;else if(n instanceof HTMLImageElement){this.initialOptions_=t;const e=()=>{if(this.unlistenImageChange(e),!this.initialOptions_)return;const i=this.iconImage_.getSize();this.setScale(_s(i[0],i[1],t.width,t.height))};return void this.listenImageChange(e)}}void 0!==e&&this.setScale(_s(e,i,t.width,t.height))}}clone(){let t,e,i;return this.initialOptions_?(e=this.initialOptions_.width,i=this.initialOptions_.height):(t=this.getScale(),t=Array.isArray(t)?t.slice():t),new xs({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,crossOrigin:this.crossOrigin_,offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,opacity:this.getOpacity(),rotateWithView:this.getRotateWithView(),rotation:this.getRotation(),scale:t,width:e,height:i,size:null!==this.size_?this.size_.slice():void 0,src:this.getSrc(),displacement:this.getDisplacement().slice(),declutterMode:this.getDeclutterMode()})}getAnchor(){let t=this.normalizedAnchor_;if(!t){t=this.anchor_;const e=this.getSize();if("fraction"==this.anchorXUnits_||"fraction"==this.anchorYUnits_){if(!e)return null;t=this.anchor_.slice(),"fraction"==this.anchorXUnits_&&(t[0]*=e[0]),"fraction"==this.anchorYUnits_&&(t[1]*=e[1])}if("top-left"!=this.anchorOrigin_){if(!e)return null;t===this.anchor_&&(t=this.anchor_.slice()),"top-right"!=this.anchorOrigin_&&"bottom-right"!=this.anchorOrigin_||(t[0]=-t[0]+e[0]),"bottom-left"!=this.anchorOrigin_&&"bottom-right"!=this.anchorOrigin_||(t[1]=-t[1]+e[1])}this.normalizedAnchor_=t}const e=this.getDisplacement(),i=this.getScaleArray();return[t[0]-e[0]/i[0],t[1]+e[1]/i[1]]}setAnchor(t){this.anchor_=t,this.normalizedAnchor_=null}getColor(){return this.color_}getImage(t){return this.iconImage_.getImage(t)}getPixelRatio(t){return this.iconImage_.getPixelRatio(t)}getImageSize(){return this.iconImage_.getSize()}getImageState(){return this.iconImage_.getImageState()}getHitDetectionImage(){return this.iconImage_.getHitDetectionImage()}getOrigin(){if(this.origin_)return this.origin_;let t=this.offset_;if("top-left"!=this.offsetOrigin_){const e=this.getSize(),i=this.iconImage_.getSize();if(!e||!i)return null;t=t.slice(),"top-right"!=this.offsetOrigin_&&"bottom-right"!=this.offsetOrigin_||(t[0]=i[0]-e[0]-t[0]),"bottom-left"!=this.offsetOrigin_&&"bottom-right"!=this.offsetOrigin_||(t[1]=i[1]-e[1]-t[1])}return this.origin_=t,this.origin_}getSrc(){return this.iconImage_.getSrc()}getSize(){return this.size_?this.size_:this.iconImage_.getSize()}getWidth(){const t=this.getScaleArray();return this.size_?this.size_[0]*t[0]:this.iconImage_.getImageState()==dr.LOADED?this.iconImage_.getSize()[0]*t[0]:void 0}getHeight(){const t=this.getScaleArray();return this.size_?this.size_[1]*t[1]:this.iconImage_.getImageState()==dr.LOADED?this.iconImage_.getSize()[1]*t[1]:void 0}setScale(t){delete this.initialOptions_,super.setScale(t)}listenImageChange(t){this.iconImage_.addEventListener(m,t)}load(){this.iconImage_.load()}unlistenImageChange(t){this.iconImage_.removeEventListener(m,t)}ready(){return this.iconImage_.ready()}}class vs{constructor(t){t=t||{},this.font_=t.font,this.rotation_=t.rotation,this.rotateWithView_=t.rotateWithView,this.scale_=t.scale,this.scaleArray_=gr(void 0!==t.scale?t.scale:1),this.text_=t.text,this.textAlign_=t.textAlign,this.justify_=t.justify,this.repeat_=t.repeat,this.textBaseline_=t.textBaseline,this.fill_=void 0!==t.fill?t.fill:new cs({color:"#333"}),this.maxAngle_=void 0!==t.maxAngle?t.maxAngle:Math.PI/4,this.placement_=void 0!==t.placement?t.placement:"point",this.overflow_=!!t.overflow,this.stroke_=void 0!==t.stroke?t.stroke:null,this.offsetX_=void 0!==t.offsetX?t.offsetX:0,this.offsetY_=void 0!==t.offsetY?t.offsetY:0,this.backgroundFill_=t.backgroundFill?t.backgroundFill:null,this.backgroundStroke_=t.backgroundStroke?t.backgroundStroke:null,this.padding_=void 0===t.padding?null:t.padding,this.declutterMode_=t.declutterMode}clone(){const t=this.getScale();return new vs({font:this.getFont(),placement:this.getPlacement(),repeat:this.getRepeat(),maxAngle:this.getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(t)?t.slice():t,text:this.getText(),textAlign:this.getTextAlign(),justify:this.getJustify(),textBaseline:this.getTextBaseline(),fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()||void 0,declutterMode:this.getDeclutterMode()})}getOverflow(){return this.overflow_}getFont(){return this.font_}getMaxAngle(){return this.maxAngle_}getPlacement(){return this.placement_}getRepeat(){return this.repeat_}getOffsetX(){return this.offsetX_}getOffsetY(){return this.offsetY_}getFill(){return this.fill_}getRotateWithView(){return this.rotateWithView_}getRotation(){return this.rotation_}getScale(){return this.scale_}getScaleArray(){return this.scaleArray_}getStroke(){return this.stroke_}getText(){return this.text_}getTextAlign(){return this.textAlign_}getJustify(){return this.justify_}getTextBaseline(){return this.textBaseline_}getBackgroundFill(){return this.backgroundFill_}getBackgroundStroke(){return this.backgroundStroke_}getPadding(){return this.padding_}getDeclutterMode(){return this.declutterMode_}setOverflow(t){this.overflow_=t}setFont(t){this.font_=t}setMaxAngle(t){this.maxAngle_=t}setOffsetX(t){this.offsetX_=t}setOffsetY(t){this.offsetY_=t}setPlacement(t){this.placement_=t}setRepeat(t){this.repeat_=t}setRotateWithView(t){this.rotateWithView_=t}setFill(t){this.fill_=t}setRotation(t){this.rotation_=t}setScale(t){this.scale_=t,this.scaleArray_=gr(void 0!==t?t:1)}setStroke(t){this.stroke_=t}setText(t){this.text_=t}setTextAlign(t){this.textAlign_=t}setJustify(t){this.justify_=t}setTextBaseline(t){this.textBaseline_=t}setBackgroundFill(t){this.backgroundFill_=t}setBackgroundStroke(t){this.backgroundStroke_=t}setPadding(t){this.padding_=t}}let ws=0;const bs=0,Cs=1<",GreaterThanOrEqualTo:">=",LessThan:"<",LessThanOrEqualTo:"<=",Multiply:"*",Divide:"/",Add:"+",Subtract:"-",Clamp:"clamp",Mod:"%",Pow:"^",Abs:"abs",Floor:"floor",Ceil:"ceil",Round:"round",Sin:"sin",Cos:"cos",Atan:"atan",Sqrt:"sqrt",Match:"match",Between:"between",Interpolate:"interpolate",Coalesce:"coalesce",Case:"case",In:"in",Number:"number",String:"string",Array:"array",Color:"color",Id:"id",Band:"band",Palette:"palette",ToString:"to-string"},Gs={[js.Get]:Vs((([t,e])=>void 0!==e?function(t){switch(t){case"string":return Es;case"color":return Ts;case"number":return Ss;case"boolean":return Cs;case"number[]":return Rs;default:throw new Error(`Unrecognized type hint: ${t}`)}}(e.value):Is),qs(1,2),(function(t,e){const i=zs(t[1],e);if(!(i instanceof As))throw new Error("Expected a literal argument for get operation");if("string"!=typeof i.value)throw new Error("Expected a string argument for get operation");if(e.properties.add(i.value),3===t.length){return[i,zs(t[2],e)]}return[i]})),[js.Var]:Vs((([t])=>t.type),qs(1,1),(function(t,e,i,n){const r=t[1];if("string"!=typeof r)throw new Error("Expected a string argument for var operation");if(e.variables.add(r),!("variables"in e.style)||void 0===e.style.variables[r])return[new As(Is,r)];const s=e.style.variables[r],o=zs(s,e);if(o.value=r,n&&!Ps(n,o.type))throw new Error(`The variable ${r} has type ${Fs(o.type)} but the following type was expected: ${Fs(n)}`);return[o]})),[js.Id]:Vs(Ss|Es,Ns,(function(t,e){e.featureId=!0})),[js.Concat]:Vs(Es,qs(2,1/0),Ws(Is)),[js.GeometryType]:Vs(Es,Ns,(function(t,e){e.geometryType=!0})),[js.Resolution]:Vs(Ss,Ns),[js.Zoom]:Vs(Ss,Ns),[js.Time]:Vs(Ss,Ns),[js.Any]:Vs(Cs,qs(2,1/0),Ws(Cs)),[js.All]:Vs(Cs,qs(2,1/0),Ws(Cs)),[js.Not]:Vs(Cs,qs(1,1),Ws(Cs)),[js.Equal]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.NotEqual]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.GreaterThan]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.GreaterThanOrEqualTo]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.LessThan]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.LessThanOrEqualTo]:Vs(Cs,qs(2,2),Ws(Is),Xs),[js.Multiply]:Vs((t=>{let e=Ss|Ts;for(let i=0;i{let e=Is;for(let i=1;i{let e=Is;for(let i=2;i{let e=Ts|Ss;for(let i=3;i{let e=Is;for(let i=1;i3===t.length||4===t.length?Rs|Ts:Rs),qs(1,1/0),Ws(Ss)),[js.Color]:Vs(Ts,qs(1,4),Ws(Ss)),[js.Band]:Vs(Ss,qs(1,3),Ws(Ss)),[js.Palette]:Vs(Ts,qs(2,2),(function(t,e){const i=zs(t[1],e,Ss);if(i.type!==Ss)throw new Error(`The first argument of palette must be an number, got ${Fs(i.type)} instead`);const n=t[2];if(!Array.isArray(n))throw new Error("The second argument of palette must be an array");const r=new Array(n.length);for(let t=0;te){throw new Error(`Expected ${e===1/0?`${t} or more`:`${t} to ${e}`} arguments for ${r}, got ${s}`)}}}function Ws(t){return function(e,i){const n=e[0],r=e.length-1,s=new Array(r);for(let o=0;o{for(let e=0;e{for(let e=0;et.properties[n];case js.Var:return t=>t.variables[n];default:throw new Error(`Unsupported accessor operator ${t.operator}`)}}(t);case js.Id:return t=>t.featureId;case js.GeometryType:return t=>t.geometryType;case js.Concat:{const e=t.args.map((t=>Us(t)));return t=>"".concat(...e.map((e=>e(t).toString())))}case js.Resolution:return t=>t.resolution;case js.Any:case js.All:case js.Between:case js.In:case js.Not:return function(t,e){const i=t.operator,n=t.args.length,r=new Array(n);for(let e=0;e{for(let e=0;e{for(let e=0;e{const e=r[0](t),i=r[1](t),n=r[2](t);return e>=i&&e<=n};case js.In:return t=>{const e=r[0](t);for(let i=1;i!r[0](t);default:throw new Error(`Unsupported logical operator ${i}`)}}(t);case js.Equal:case js.NotEqual:case js.LessThan:case js.LessThanOrEqualTo:case js.GreaterThan:case js.GreaterThanOrEqualTo:return function(t,e){const i=t.operator,n=Us(t.args[0]),r=Us(t.args[1]);switch(i){case js.Equal:return t=>n(t)===r(t);case js.NotEqual:return t=>n(t)!==r(t);case js.LessThan:return t=>n(t)n(t)<=r(t);case js.GreaterThan:return t=>n(t)>r(t);case js.GreaterThanOrEqualTo:return t=>n(t)>=r(t);default:throw new Error(`Unsupported comparison operator ${i}`)}}(t);case js.Multiply:case js.Divide:case js.Add:case js.Subtract:case js.Clamp:case js.Mod:case js.Pow:case js.Abs:case js.Floor:case js.Ceil:case js.Round:case js.Sin:case js.Cos:case js.Atan:case js.Sqrt:return function(t,e){const i=t.operator,n=t.args.length,r=new Array(n);for(let e=0;e{let e=1;for(let i=0;ir[0](t)/r[1](t);case js.Add:return t=>{let e=0;for(let i=0;ir[0](t)-r[1](t);case js.Clamp:return t=>{const e=r[0](t),i=r[1](t);if(en?n:e};case js.Mod:return t=>r[0](t)%r[1](t);case js.Pow:return t=>Math.pow(r[0](t),r[1](t));case js.Abs:return t=>Math.abs(r[0](t));case js.Floor:return t=>Math.floor(r[0](t));case js.Ceil:return t=>Math.ceil(r[0](t));case js.Round:return t=>Math.round(r[0](t));case js.Sin:return t=>Math.sin(r[0](t));case js.Cos:return t=>Math.cos(r[0](t));case js.Atan:return 2===n?t=>Math.atan2(r[0](t),r[1](t)):t=>Math.atan(r[0](t));case js.Sqrt:return t=>Math.sqrt(r[0](t));default:throw new Error(`Unsupported numeric operator ${i}`)}}(t);case js.Case:return function(t,e){const i=t.args.length,n=new Array(i);for(let e=0;e{for(let e=0;e{const e=n[0](t);for(let r=1;r{const e=n[0](t),r=n[1](t);let s,o;for(let a=2;a=r)return 2===a?l:h?Ks(e,r,s,o,i,l):$s(e,r,s,o,i,l);s=i,o=l}return o}}(t);case js.ToString:return function(t,e){const i=t.operator,n=t.args.length,r=new Array(n);for(let e=0;e{const i=r[0](e);return t.args[0].type===Ts?Dr(i):i.toString()};throw new Error(`Unsupported convert operator ${i}`)}(t);default:throw new Error(`Unsupported operator ${i}`)}}function $s(t,e,i,n,r,s){const o=r-i;if(0===o)return n;const a=e-i;return n+(1===t?a/o:(Math.pow(t,a)-1)/(Math.pow(t,o)-1))*(s-n)}function Ks(t,e,i,n,r,s){if(0===r-i)return n;const o=Fr(n),a=Fr(s);let l=a[2]-o[2];l>180?l-=360:l<-180&&(l+=360);return Ar(function(t){const e=_r.rgb(wr.xyz(t));return e[3]=t[3],e}([$s(t,e,i,o[0],r,a[0]),$s(t,e,i,o[1],r,a[1]),o[2]+$s(t,e,i,0,r,l),$s(t,e,i,n[3],r,s[3])]))}function Hs(t){return!0}function Js(t){const e=Os(),i=function(t,e){const i=t.length,n=new Array(i);for(let r=0;r4)throw new Error(`Expected a color with 3 or 4 values for ${e}`);return i}function vo(t,e){const i=mo(t,e);if(2!==i.length)throw new Error(`Expected an array of two numbers for ${e}`);return i}const wo="renderOrder";class bo extends Zn{constructor(t){t=t||{};const e=Object.assign({},t);delete e.style,delete e.renderBuffer,delete e.updateWhileAnimating,delete e.updateWhileInteracting,super(e),this.declutter_=t.declutter?String(t.declutter):void 0,this.renderBuffer_=void 0!==t.renderBuffer?t.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(t.style),this.updateWhileAnimating_=void 0!==t.updateWhileAnimating&&t.updateWhileAnimating,this.updateWhileInteracting_=void 0!==t.updateWhileInteracting&&t.updateWhileInteracting}getDeclutter(){return this.declutter_}getFeatures(t){return super.getFeatures(t)}getRenderBuffer(){return this.renderBuffer_}getRenderOrder(){return this.get(wo)}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}getUpdateWhileAnimating(){return this.updateWhileAnimating_}getUpdateWhileInteracting(){return this.updateWhileInteracting_}renderDeclutter(t,e){const i=this.getDeclutter();i in t.declutter==!1&&(t.declutter[i]=new Jn(9)),this.getRenderer().renderDeclutter(t,e)}setRenderOrder(t){this.set(wo,t)}setStyle(t){this.style_=function(t){if(void 0===t)return fs;if(!t)return null;if("function"==typeof t)return t;if(t instanceof ys)return t;if(!Array.isArray(t))return Qs([t]);if(0===t.length)return[];const e=t.length,i=t[0];if(i instanceof ys){const i=new Array(e);for(let n=0;n=0;--r){const s=g[r],c=s.layer;if(c.hasRenderer()&&Yn(s,h)&&o.call(a,c)){const r=c.getRenderer(),o=c.getSource();if(r&&o){const a=o.getWrapX()?d:t,h=u.bind(null,s.managed);y[0]=a[0]+p[n][0],y[1]=a[1]+p[n][1],l=r.forEachFeatureAtCoordinate(y,e,i,h,m)}if(l)return l}}if(0===m.length)return;const _=1/m.length;return m.forEach(((t,e)=>t.distanceSq+=e*_)),m.sort(((t,e)=>t.distanceSq-e.distanceSq)),m.some((t=>l=t.callback(t.feature,t.layer,t.geometry))),l}hasFeatureAtCoordinate(t,e,i,n,r,s){return void 0!==this.forEachFeatureAtCoordinate(t,e,i,n,l,this,r,s)}getMap(){return this.map_}renderFrame(t){k()}scheduleExpireIconCache(t){Gr.canExpireCache()&&t.postRenderFunctions.push(So)}}function So(t,e){Gr.expire()}class Eo extends t{constructor(t,e,i,n){super(t),this.inversePixelTransform=e,this.frameState=i,this.context=n}}class To extends Co{constructor(t){super(t),this.fontChangeListenerKey_=T(Qr,e,t.redrawText.bind(t)),this.element_=document.createElement("div");const i=this.element_.style;i.position="absolute",i.width="100%",i.height="100%",i.zIndex="0",this.element_.className=ot+" ol-layers";const n=t.getViewport();n.insertBefore(this.element_,n.firstChild||null),this.children_=[],this.renderedVisible_=!0}dispatchRenderEvent(t,e){const i=this.getMap();if(i.hasListener(t)){const n=new Eo(t,void 0,e);i.dispatchEvent(n)}}disposeInternal(){I(this.fontChangeListenerKey_),this.element_.parentNode.removeChild(this.element_),super.disposeInternal()}renderFrame(t){if(!t)return void(this.renderedVisible_&&(this.element_.style.display="none",this.renderedVisible_=!1));this.calculateMatrices2D(t),this.dispatchRenderEvent(Zt,t);const e=t.layerStatesArray.sort((function(t,e){return t.zIndex-e.zIndex}));e.some((t=>t.layer instanceof bo&&t.layer.getDeclutter()))&&(t.declutter={});const i=t.viewState;this.children_.length=0;const n=[];let r=null;for(let s=0,o=e.length;s=0;--i){const n=e[i],r=n.layer;r.getDeclutter()&&r.renderDeclutter(t,n)}e.forEach((e=>e.layer.renderDeferred(t)))}}class Ro extends t{constructor(t,e){super(t),this.layer=e}}const Io="layers";class Mo extends Bt{constructor(t){t=t||{};const e=Object.assign({},t);delete e.layers;let i=t.layers;super(e),this.on,this.once,this.un,this.layersListenerKeys_=[],this.listenerKeys_={},this.addChangeListener(Io,this.handleLayersChanged_),i?Array.isArray(i)?i=new Ct(i.slice(),{unique:!0}):At("function"==typeof i.getArray,"Expected `layers` to be an array or a `Collection`"):i=new Ct(void 0,{unique:!0}),this.setLayers(i)}handleLayerChange_(){this.changed()}handleLayersChanged_(){this.layersListenerKeys_.forEach(I),this.layersListenerKeys_.length=0;const t=this.getLayers();this.layersListenerKeys_.push(T(t,xt,this.handleLayersAdd_,this),T(t,vt,this.handleLayersRemove_,this));for(const t in this.listenerKeys_)this.listenerKeys_[t].forEach(I);p(this.listenerKeys_);const e=t.getArray();for(let t=0,i=e.length;t{this.clickTimeoutId_=void 0;const e=new Fo(Po.SINGLECLICK,this.map_,t);this.dispatchEvent(e)}),250)}updateActivePointers_(t){const e=t,i=e.pointerId;if(e.type==Po.POINTERUP||e.type==Po.POINTERCANCEL){delete this.trackedTouches_[i];for(const t in this.trackedTouches_)if(this.trackedTouches_[t].target!==e.target){delete this.trackedTouches_[t];break}}else e.type!=Po.POINTERDOWN&&e.type!=Po.POINTERMOVE||(this.trackedTouches_[i]=e);this.activePointers_=Object.values(this.trackedTouches_)}handlePointerUp_(t){this.updateActivePointers_(t);const e=new Fo(Po.POINTERUP,this.map_,t,void 0,void 0,this.activePointers_);this.dispatchEvent(e),this.emulateClicks_&&!e.defaultPrevented&&!this.dragging_&&this.isMouseActionButton_(t)&&this.emulateClick_(this.down_),0===this.activePointers_.length&&(this.dragListenerKeys_.forEach(I),this.dragListenerKeys_.length=0,this.dragging_=!1,this.down_=null)}isMouseActionButton_(t){return 0===t.button}handlePointerDown_(t){this.emulateClicks_=0===this.activePointers_.length,this.updateActivePointers_(t);const e=new Fo(Po.POINTERDOWN,this.map_,t,void 0,void 0,this.activePointers_);if(this.dispatchEvent(e),this.down_=new PointerEvent(t.type,t),Object.defineProperty(this.down_,"target",{writable:!1,value:t.target}),0===this.dragListenerKeys_.length){const t=this.map_.getOwnerDocument();this.dragListenerKeys_.push(T(t,Po.POINTERMOVE,this.handlePointerMove_,this),T(t,Po.POINTERUP,this.handlePointerUp_,this),T(this.element_,Po.POINTERCANCEL,this.handlePointerUp_,this)),this.element_.getRootNode&&this.element_.getRootNode()!==t&&this.dragListenerKeys_.push(T(this.element_.getRootNode(),Po.POINTERUP,this.handlePointerUp_,this))}}handlePointerMove_(t){if(this.isMoving_(t)){this.updateActivePointers_(t),this.dragging_=!0;const e=new Fo(Po.POINTERDRAG,this.map_,t,this.dragging_,void 0,this.activePointers_);this.dispatchEvent(e)}}relayMoveEvent_(t){this.originalPointerMoveEvent_=t;const e=!(!this.down_||!this.isMoving_(t));this.dispatchEvent(new Fo(Po.POINTERMOVE,this.map_,t,e))}handleTouchMove_(t){const e=this.originalPointerMoveEvent_;e&&!e.defaultPrevented||"boolean"==typeof t.cancelable&&!0!==t.cancelable||t.preventDefault()}isMoving_(t){return this.dragging_||Math.abs(t.clientX-this.down_.clientX)>this.moveTolerance_||Math.abs(t.clientY-this.down_.clientY)>this.moveTolerance_}disposeInternal(){this.relayedListenerKey_&&(I(this.relayedListenerKey_),this.relayedListenerKey_=null),this.element_.removeEventListener(S,this.boundHandleTouchMove_),this.pointerdownListenerKey_&&(I(this.pointerdownListenerKey_),this.pointerdownListenerKey_=null),this.dragListenerKeys_.forEach(I),this.dragListenerKeys_.length=0,this.element_=null,super.disposeInternal()}}const Oo=1/0;class zo{constructor(t,e){this.priorityFunction_=t,this.keyFunction_=e,this.elements_=[],this.priorities_=[],this.queuedElements_={}}clear(){this.elements_.length=0,this.priorities_.length=0,p(this.queuedElements_)}dequeue(){const t=this.elements_,e=this.priorities_,i=t[0];1==t.length?(t.length=0,e.length=0):(t[0]=t.pop(),e[0]=e.pop(),this.siftUp_(0));const n=this.keyFunction_(i);return delete this.queuedElements_[n],i}enqueue(t){At(!(this.keyFunction_(t)in this.queuedElements_),"Tried to enqueue an `element` that was already added to the queue");const e=this.priorityFunction_(t);return e!=Oo&&(this.elements_.push(t),this.priorities_.push(e),this.queuedElements_[this.keyFunction_(t)]=!0,this.siftDown_(0,this.elements_.length-1),!0)}getCount(){return this.elements_.length}getLeftChildIndex_(t){return 2*t+1}getRightChildIndex_(t){return 2*t+2}getParentIndex_(t){return t-1>>1}heapify_(){let t;for(t=(this.elements_.length>>1)-1;t>=0;t--)this.siftUp_(t)}isEmpty(){return 0===this.elements_.length}isKeyQueued(t){return t in this.queuedElements_}isQueued(t){return this.isKeyQueued(this.keyFunction_(t))}siftUp_(t){const e=this.elements_,i=this.priorities_,n=e.length,r=e[t],s=i[t],o=t;for(;t>1;){const r=this.getLeftChildIndex_(t),s=this.getRightChildIndex_(t),o=st;){const t=this.getParentIndex_(e);if(!(n[t]>s))break;i[e]=i[t],n[e]=n[t],e=t}i[e]=r,n[e]=s}reprioritize(){const t=this.priorityFunction_,e=this.elements_,i=this.priorities_;let n=0;const r=e.length;let s,o,a;for(o=0;o0;)n=this.dequeue()[0],r=n.getKey(),i=n.getState(),i!==jo.IDLE||r in this.tilesLoadingKeys_||(this.tilesLoadingKeys_[r]=!0,++this.tilesLoading_,++s,n.load())}}var No=class extends tt{constructor(t){t=t||{},super({element:document.createElement("div"),render:t.render,target:t.target}),this.ulElement_=document.createElement("ul"),this.collapsed_=void 0===t.collapsed||t.collapsed,this.userCollapsed_=this.collapsed_,this.overrideCollapsible_=void 0!==t.collapsible,this.collapsible_=void 0===t.collapsible||t.collapsible,this.collapsible_||(this.collapsed_=!1);const e=void 0!==t.className?t.className:"ol-attribution",i=void 0!==t.tipLabel?t.tipLabel:"Attributions",n=void 0!==t.expandClassName?t.expandClassName:e+"-expand",r=void 0!==t.collapseLabel?t.collapseLabel:"›",s=void 0!==t.collapseClassName?t.collapseClassName:e+"-collapse";"string"==typeof r?(this.collapseLabel_=document.createElement("span"),this.collapseLabel_.textContent=r,this.collapseLabel_.className=s):this.collapseLabel_=r;const o=void 0!==t.label?t.label:"i";"string"==typeof o?(this.label_=document.createElement("span"),this.label_.textContent=o,this.label_.className=n):this.label_=o;const a=this.collapsible_&&!this.collapsed_?this.collapseLabel_:this.label_;this.toggleButton_=document.createElement("button"),this.toggleButton_.setAttribute("type","button"),this.toggleButton_.setAttribute("aria-expanded",String(!this.collapsed_)),this.toggleButton_.title=i,this.toggleButton_.appendChild(a),this.toggleButton_.addEventListener(x,this.handleClick_.bind(this),!1);const l=e+" "+ot+" "+lt+(this.collapsed_&&this.collapsible_?" "+ht:"")+(this.collapsible_?"":" ol-uncollapsible"),h=this.element;h.className=l,h.appendChild(this.toggleButton_),h.appendChild(this.ulElement_),this.renderedAttributions_=[],this.renderedVisible_=!0}collectSourceAttributions_(t){const e=Array.from(new Set(this.getMap().getAllLayers().flatMap((e=>e.getAttributions(t))))),i=!this.getMap().getAllLayers().some((t=>t.getSource()&&!1===t.getSource().getAttributionsCollapsible()));return this.overrideCollapsible_||this.setCollapsible(i),e}async updateElement_(t){if(!t)return void(this.renderedVisible_&&(this.element.style.display="none",this.renderedVisible_=!1));const e=await Promise.all(this.collectSourceAttributions_(t).map((t=>d((()=>t))))),i=e.length>0;if(this.renderedVisible_!=i&&(this.element.style.display=i?"":"none",this.renderedVisible_=i),!a(e,this.renderedAttributions_)){!function(t){for(;t.lastChild;)t.removeChild(t.lastChild)}(this.ulElement_);for(let t=0,i=e.length;t0&&e%(2*Math.PI)!=0?t.animate({rotation:0,duration:this.duration_,easing:zi}):t.setRotation(0))}render(t){const e=t.frameState;if(!e)return;const i=e.viewState.rotation;if(i!=this.rotation_){const t="rotate("+i+"rad)";if(this.autoHide_){const t=this.element.classList.contains(st);t||0!==i?t&&0!==i&&this.element.classList.remove(st):this.element.classList.add(st)}this.label_.style.transform=t}this.rotation_=i}};var Wo=class extends tt{constructor(t){t=t||{},super({element:document.createElement("div"),target:t.target});const e=void 0!==t.className?t.className:"ol-zoom",i=void 0!==t.delta?t.delta:1,n=void 0!==t.zoomInClassName?t.zoomInClassName:e+"-in",r=void 0!==t.zoomOutClassName?t.zoomOutClassName:e+"-out",s=void 0!==t.zoomInLabel?t.zoomInLabel:"+",o=void 0!==t.zoomOutLabel?t.zoomOutLabel:"–",a=void 0!==t.zoomInTipLabel?t.zoomInTipLabel:"Zoom in",l=void 0!==t.zoomOutTipLabel?t.zoomOutTipLabel:"Zoom out",h=document.createElement("button");h.className=n,h.setAttribute("type","button"),h.title=a,h.appendChild("string"==typeof s?document.createTextNode(s):s),h.addEventListener(x,this.handleClick_.bind(this,i),!1);const u=document.createElement("button");u.className=r,u.setAttribute("type","button"),u.title=l,u.appendChild("string"==typeof o?document.createTextNode(o):o),u.addEventListener(x,this.handleClick_.bind(this,-i),!1);const c=e+" "+ot+" "+lt,d=this.element;d.className=c,d.appendChild(h),d.appendChild(u),this.duration_=void 0!==t.duration?t.duration:250}handleClick_(t,e){e.preventDefault(),this.zoomByDelta_(t)}zoomByDelta_(t){const e=this.getMap().getView();if(!e)return;const i=e.getZoom();if(void 0!==i){const n=e.getConstrainedZoom(i+t);this.duration_>0?(e.getAnimating()&&e.cancelAnimations(),e.animate({zoom:n,duration:this.duration_,easing:zi})):e.setZoom(n)}}};var Xo="active";class Bo extends A{constructor(t){super(),this.on,this.once,this.un,t&&t.handleEvent&&(this.handleEvent=t.handleEvent),this.map_=null,this.setActive(!0)}getActive(){return this.get(Xo)}getMap(){return this.map_}handleEvent(t){return!0}setActive(t){this.set(Xo,t)}setMap(t){this.map_=t}}function Vo(t,e,i,n){const r=t.getZoom();if(void 0===r)return;const s=t.getConstrainedZoom(r+e),o=t.getResolutionForZoom(s);t.getAnimating()&&t.cancelAnimations(),t.animate({resolution:o,anchor:i,duration:void 0!==n?n:250,easing:zi})}var Yo=class extends Bo{constructor(t){super(),t=t||{},this.delta_=t.delta?t.delta:1,this.duration_=void 0!==t.duration?t.duration:250}handleEvent(t){let e=!1;if(t.type==Po.DBLCLICK){const i=t.originalEvent,n=t.map,r=t.coordinate,s=i.shiftKey?-this.delta_:this.delta_;Vo(n.getView(),s,r,this.duration_),i.preventDefault(),e=!0}return!e}};class Zo extends Bo{constructor(t){super(t=t||{}),t.handleDownEvent&&(this.handleDownEvent=t.handleDownEvent),t.handleDragEvent&&(this.handleDragEvent=t.handleDragEvent),t.handleMoveEvent&&(this.handleMoveEvent=t.handleMoveEvent),t.handleUpEvent&&(this.handleUpEvent=t.handleUpEvent),t.stopDown&&(this.stopDown=t.stopDown),this.handlingDownUpSequence=!1,this.targetPointers=[]}getPointerCount(){return this.targetPointers.length}handleDownEvent(t){return!1}handleDragEvent(t){}handleEvent(t){if(!t.originalEvent)return!0;let e=!1;if(this.updateTrackedPointers_(t),this.handlingDownUpSequence){if(t.type==Po.POINTERDRAG)this.handleDragEvent(t),t.originalEvent.preventDefault();else if(t.type==Po.POINTERUP){const e=this.handleUpEvent(t);this.handlingDownUpSequence=e&&this.targetPointers.length>0}}else if(t.type==Po.POINTERDOWN){const i=this.handleDownEvent(t);this.handlingDownUpSequence=i,e=this.stopDown(i)}else t.type==Po.POINTERMOVE&&this.handleMoveEvent(t);return!e}handleMoveEvent(t){}handleUpEvent(t){return!1}stopDown(t){return t}updateTrackedPointers_(t){t.activePointers&&(this.targetPointers=t.activePointers)}}function Uo(t){const e=t.length;let i=0,n=0;for(let r=0;r0&&this.condition_(t)){const e=t.map.getView();return this.lastCentroid=null,e.getAnimating()&&e.cancelAnimations(),this.kinetic_&&this.kinetic_.begin(),this.noKinetic_=this.targetPointers.length>1,!0}return!1}};class oa extends Zo{constructor(t){t=t||{},super({stopDown:h}),this.condition_=t.condition?t.condition:Ko,this.lastAngle_=void 0,this.duration_=void 0!==t.duration?t.duration:250}handleDragEvent(t){if(!na(t))return;const e=t.map,i=e.getView();if(i.getConstraints().rotation===Ai)return;const n=e.getSize(),r=t.pixel,s=Math.atan2(n[1]/2-r[1],r[0]-n[0]/2);if(void 0!==this.lastAngle_){const t=s-this.lastAngle_;i.adjustRotationInternal(-t)}this.lastAngle_=s}handleUpEvent(t){if(!na(t))return!0;return t.map.getView().endInteraction(this.duration_),!1}handleDownEvent(t){if(!na(t))return!1;if(Qo(t)&&this.condition_(t)){return t.map.getView().beginInteraction(),this.lastAngle_=void 0,!0}return!1}}class aa extends i{constructor(t){super(),this.geometry_=null,this.element_=document.createElement("div"),this.element_.style.position="absolute",this.element_.style.pointerEvents="auto",this.element_.className="ol-box "+t,this.map_=null,this.startPixel_=null,this.endPixel_=null}disposeInternal(){this.setMap(null)}render_(){const t=this.startPixel_,e=this.endPixel_,i="px",n=this.element_.style;n.left=Math.min(t[0],e[0])+i,n.top=Math.min(t[1],e[1])+i,n.width=Math.abs(e[0]-t[0])+i,n.height=Math.abs(e[1]-t[1])+i}setMap(t){if(this.map_){this.map_.getOverlayContainer().removeChild(this.element_);const t=this.element_.style;t.left="inherit",t.top="inherit",t.width="inherit",t.height="inherit"}this.map_=t,this.map_&&this.map_.getOverlayContainer().appendChild(this.element_)}setPixels(t,e){this.startPixel_=t,this.endPixel_=e,this.createOrUpdateGeometry(),this.render_()}createOrUpdateGeometry(){const t=this.startPixel_,e=this.endPixel_,i=[t,[t[0],e[1]],e,[e[0],t[1]]].map(this.map_.getCoordinateFromPixelInternal,this.map_);i[4]=i[0].slice(),this.geometry_?this.geometry_.setCoordinates([i]):this.geometry_=new Nn([i])}getGeometry(){return this.geometry_}}const la="boxstart",ha="boxdrag",ua="boxend",ca="boxcancel";class da extends t{constructor(t,e,i){super(t),this.coordinate=e,this.mapBrowserEvent=i}}class pa extends Zo{constructor(t){super(),this.on,this.once,this.un,t=t||{},this.box_=new aa(t.className||"ol-dragbox"),this.minArea_=void 0!==t.minArea?t.minArea:64,t.onBoxEnd&&(this.onBoxEnd=t.onBoxEnd),this.startPixel_=null,this.condition_=t.condition?t.condition:Qo,this.boxEndCondition_=t.boxEndCondition?t.boxEndCondition:this.defaultBoxEndCondition}defaultBoxEndCondition(t,e,i){const n=i[0]-e[0],r=i[1]-e[1];return n*n+r*r>=this.minArea_}getGeometry(){return this.box_.getGeometry()}handleDragEvent(t){this.box_.setPixels(this.startPixel_,t.pixel),this.dispatchEvent(new da(ha,t.coordinate,t))}handleUpEvent(t){this.box_.setMap(null);const e=this.boxEndCondition_(t,this.startPixel_,t.pixel);return e&&this.onBoxEnd(t),this.dispatchEvent(new da(e?ua:ca,t.coordinate,t)),!1}handleDownEvent(t){return!!this.condition_(t)&&(this.startPixel_=t.pixel,this.box_.setMap(t.map),this.box_.setPixels(this.startPixel_,this.startPixel_),this.dispatchEvent(new da(la,t.coordinate,t)),!0)}onBoxEnd(t){}}var ga=class extends pa{constructor(t){super({condition:(t=t||{}).condition?t.condition:ea,className:t.className||"ol-dragzoom",minArea:t.minArea}),this.duration_=void 0!==t.duration?t.duration:200,this.out_=void 0!==t.out&&t.out}onBoxEnd(t){const e=this.getMap().getView();let i=this.getGeometry();if(this.out_){const t=e.rotatedExtentForGeometry(i),n=e.getResolutionForExtentInternal(t),r=e.getResolution()/n;i=i.clone(),i.scale(r*r)}e.fitInternal(i,{duration:this.duration_,easing:zi})}},fa="ArrowLeft",ma="ArrowUp",ya="ArrowRight",_a="ArrowDown";class xa extends Bo{constructor(t){super(),t=t||{},this.defaultCondition_=function(t){return ta(t)&&ia(t)},this.condition_=void 0!==t.condition?t.condition:this.defaultCondition_,this.duration_=void 0!==t.duration?t.duration:100,this.pixelDelta_=void 0!==t.pixelDelta?t.pixelDelta:128}handleEvent(t){let e=!1;if(t.type==w){const i=t.originalEvent,n=i.key;if(this.condition_(t)&&(n==_a||n==fa||n==ya||n==ma)){const r=t.map.getView(),s=r.getResolution()*this.pixelDelta_;let o=0,a=0;n==_a?a=-s:n==fa?o=-s:n==ya?o=s:a=s;const l=[o,a];ii(l,r.getRotation()),function(t,e,i){const n=t.getCenterInternal();if(n){const r=[n[0]+e[0],n[1]+e[1]];t.animateInternal({duration:void 0!==i?i:250,easing:Gi,center:t.getConstrainedCenter(r)})}}(r,l,this.duration_),i.preventDefault(),e=!0}}return!e}}var va=class extends Bo{constructor(t){super(),t=t||{},this.condition_=t.condition?t.condition:function(t){return!function(t){const e=t.originalEvent;return X?e.metaKey:e.ctrlKey}(t)&&ia(t)},this.delta_=t.delta?t.delta:1,this.duration_=void 0!==t.duration?t.duration:100}handleEvent(t){let e=!1;if(t.type==w||t.type==b){const i=t.originalEvent,n=i.key;if(this.condition_(t)&&("+"===n||"-"===n)){const r=t.map,s="+"===n?this.delta_:-this.delta_;Vo(r.getView(),s,void 0,this.duration_),i.preventDefault(),e=!0}}return!e}};class wa{constructor(t,e,i){this.decay_=t,this.minVelocity_=e,this.delay_=i,this.points_=[],this.angle_=0,this.initialVelocity_=0}begin(){this.points_.length=0,this.angle_=0,this.initialVelocity_=0}update(t,e){this.points_.push(t,e,Date.now())}end(){if(this.points_.length<6)return!1;const t=Date.now()-this.delay_,e=this.points_.length-3;if(this.points_[e+2]0&&this.points_[i+2]>t;)i-=3;const n=this.points_[e+2]-this.points_[i+2];if(n<1e3/60)return!1;const r=this.points_[e]-this.points_[i],s=this.points_[e+1]-this.points_[i+1];return this.angle_=Math.atan2(s,r),this.initialVelocity_=Math.sqrt(r*r+s*s)/n,this.initialVelocity_>this.minVelocity_}getDistance(){return(this.minVelocity_-this.initialVelocity_)/this.decay_}getAngle(){return this.angle_}}var ba=class extends Bo{constructor(t){super(t=t||{}),this.totalDelta_=0,this.lastDelta_=0,this.maxDelta_=void 0!==t.maxDelta?t.maxDelta:1,this.duration_=void 0!==t.duration?t.duration:250,this.timeout_=void 0!==t.timeout?t.timeout:80,this.useAnchor_=void 0===t.useAnchor||t.useAnchor,this.constrainResolution_=void 0!==t.constrainResolution&&t.constrainResolution;const e=t.condition?t.condition:Jo;this.condition_=t.onFocusOnly?$o(Ho,e):e,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_,this.mode_=void 0,this.trackpadEventGap_=400,this.trackpadTimeoutId_,this.deltaPerZoom_=300}endInteraction_(){this.trackpadTimeoutId_=void 0;const t=this.getMap();if(!t)return;t.getView().endInteraction(void 0,this.lastDelta_?this.lastDelta_>0?1:-1:0,this.lastAnchor_)}handleEvent(t){if(!this.condition_(t))return!0;if(t.type!==E)return!0;const e=t.map,i=t.originalEvent;let n;if(i.preventDefault(),this.useAnchor_&&(this.lastAnchor_=t.coordinate),t.type==E&&(n=i.deltaY,q&&i.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(n/=B),i.deltaMode===WheelEvent.DOM_DELTA_LINE&&(n*=40)),0===n)return!1;this.lastDelta_=n;const r=Date.now();void 0===this.startTime_&&(this.startTime_=r),(!this.mode_||r-this.startTime_>this.trackpadEventGap_)&&(this.mode_=Math.abs(n)<4?"trackpad":"wheel");const s=e.getView();if("trackpad"===this.mode_&&!s.getConstrainResolution()&&!this.constrainResolution_)return this.trackpadTimeoutId_?clearTimeout(this.trackpadTimeoutId_):(s.getAnimating()&&s.cancelAnimations(),s.beginInteraction()),this.trackpadTimeoutId_=setTimeout(this.endInteraction_.bind(this),this.timeout_),s.adjustZoom(-n/this.deltaPerZoom_,this.lastAnchor_),this.startTime_=r,!1;this.totalDelta_+=n;const o=Math.max(this.timeout_-(r-this.startTime_),0);return clearTimeout(this.timeoutId_),this.timeoutId_=setTimeout(this.handleWheelZoom_.bind(this,e),o),!1}handleWheelZoom_(t){const e=t.getView();e.getAnimating()&&e.cancelAnimations();let i=-Dt(this.totalDelta_,-this.maxDelta_*this.deltaPerZoom_,this.maxDelta_*this.deltaPerZoom_)/this.deltaPerZoom_;(e.getConstrainResolution()||this.constrainResolution_)&&(i=i?i>0?1:-1:0),Vo(e,i,this.lastAnchor_,this.duration_),this.mode_=void 0,this.totalDelta_=0,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_=void 0}setMouseAnchor(t){this.useAnchor_=t,t||(this.lastAnchor_=null)}};class Ca extends Zo{constructor(t){const e=t=t||{};e.stopDown||(e.stopDown=h),super(e),this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.threshold_=void 0!==t.threshold?t.threshold:.3,this.duration_=void 0!==t.duration?t.duration:250}handleDragEvent(t){let e=0;const i=this.targetPointers[0],n=this.targetPointers[1],r=Math.atan2(n.clientY-i.clientY,n.clientX-i.clientX);if(void 0!==this.lastAngle_){const t=r-this.lastAngle_;this.rotationDelta_+=t,!this.rotating_&&Math.abs(this.rotationDelta_)>this.threshold_&&(this.rotating_=!0),e=t}this.lastAngle_=r;const s=t.map,o=s.getView();o.getConstraints().rotation!==Ai&&(this.anchor_=s.getCoordinateFromPixelInternal(s.getEventPixel(Uo(this.targetPointers))),this.rotating_&&(s.render(),o.adjustRotationInternal(e,this.anchor_)))}handleUpEvent(t){if(this.targetPointers.length<2){return t.map.getView().endInteraction(this.duration_),!1}return!0}handleDownEvent(t){if(this.targetPointers.length>=2){const e=t.map;return this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1}}var Sa=class extends Zo{constructor(t){const e=t=t||{};e.stopDown||(e.stopDown=h),super(e),this.anchor_=null,this.duration_=void 0!==t.duration?t.duration:400,this.lastDistance_=void 0,this.lastScaleDelta_=1}handleDragEvent(t){let e=1;const i=this.targetPointers[0],n=this.targetPointers[1],r=i.clientX-n.clientX,s=i.clientY-n.clientY,o=Math.sqrt(r*r+s*s);void 0!==this.lastDistance_&&(e=this.lastDistance_/o),this.lastDistance_=o;const a=t.map,l=a.getView();1!=e&&(this.lastScaleDelta_=e),this.anchor_=a.getCoordinateFromPixelInternal(a.getEventPixel(Uo(this.targetPointers))),a.render(),l.adjustResolutionInternal(e,this.anchor_)}handleUpEvent(t){if(this.targetPointers.length<2){const e=t.map.getView(),i=this.lastScaleDelta_>1?1:-1;return e.endInteraction(this.duration_,i),!1}return!0}handleDownEvent(t){if(this.targetPointers.length>=2){const e=t.map;return this.anchor_=null,this.lastDistance_=void 0,this.lastScaleDelta_=1,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1}};function Ea(t){t instanceof Zn?t.setMapInternal(null):t instanceof Mo&&t.getLayers().forEach(Ea)}function Ta(t,e){if(t instanceof Zn)t.setMapInternal(e);else if(t instanceof Mo){const i=t.getLayers().getArray();for(let t=0,n=i.length;tthis.updateSize())),this.controls=e.controls||function(t){t=t||{};const e=new Ct;return(void 0===t.zoom||t.zoom)&&e.push(new Wo(t.zoomOptions)),(void 0===t.rotate||t.rotate)&&e.push(new qo(t.rotateOptions)),(void 0===t.attribution||t.attribution)&&e.push(new No(t.attributionOptions)),e}(),this.interactions=e.interactions||function(t){t=t||{};const e=new Ct,i=new wa(-.005,.05,100);return(void 0===t.altShiftDragRotate||t.altShiftDragRotate)&&e.push(new oa),(void 0===t.doubleClickZoom||t.doubleClickZoom)&&e.push(new Yo({delta:t.zoomDelta,duration:t.zoomDuration})),(void 0===t.dragPan||t.dragPan)&&e.push(new sa({onFocusOnly:t.onFocusOnly,kinetic:i})),(void 0===t.pinchRotate||t.pinchRotate)&&e.push(new Ca),(void 0===t.pinchZoom||t.pinchZoom)&&e.push(new Sa({duration:t.zoomDuration})),(void 0===t.keyboard||t.keyboard)&&(e.push(new xa),e.push(new va({delta:t.zoomDelta,duration:t.zoomDuration}))),(void 0===t.mouseWheelZoom||t.mouseWheelZoom)&&e.push(new ba({onFocusOnly:t.onFocusOnly,duration:t.zoomDuration})),(void 0===t.shiftDragZoom||t.shiftDragZoom)&&e.push(new ga({duration:t.zoomDuration})),e}({onFocusOnly:!0}),this.overlays_=e.overlays,this.overlayIdIndex_={},this.renderer_=null,this.postRenderFunctions_=[],this.tileQueue_=new Go(this.getTilePriority.bind(this),this.handleTileChange_.bind(this)),this.addChangeListener(et,this.handleLayerGroupChanged_),this.addChangeListener(rt,this.handleViewChanged_),this.addChangeListener(it,this.handleSizeChanged_),this.addChangeListener(nt,this.handleTargetChanged_),this.setProperties(e.values);const i=this;!t.view||t.view instanceof Wn||t.view.then((function(t){i.setView(new Wn(t))})),this.controls.addEventListener(xt,(t=>{t.element.setMap(this)})),this.controls.addEventListener(vt,(t=>{t.element.setMap(null)})),this.interactions.addEventListener(xt,(t=>{t.element.setMap(this)})),this.interactions.addEventListener(vt,(t=>{t.element.setMap(null)})),this.overlays_.addEventListener(xt,(t=>{this.addOverlayInternal_(t.element)})),this.overlays_.addEventListener(vt,(t=>{const e=t.element.getId();void 0!==e&&delete this.overlayIdIndex_[e.toString()],t.element.setMap(null)})),this.controls.forEach((t=>{t.setMap(this)})),this.interactions.forEach((t=>{t.setMap(this)})),this.overlays_.forEach(this.addOverlayInternal_.bind(this))}addControl(t){this.getControls().push(t)}addInteraction(t){this.getInteractions().push(t)}addLayer(t){this.getLayerGroup().getLayers().push(t)}handleLayerAdd_(t){Ta(t.layer,this)}addOverlay(t){this.getOverlays().push(t)}addOverlayInternal_(t){const e=t.getId();void 0!==e&&(this.overlayIdIndex_[e.toString()]=t),t.setMap(this)}disposeInternal(){this.controls.clear(),this.interactions.clear(),this.overlays_.clear(),this.resizeObserver_.disconnect(),this.setTarget(null),super.disposeInternal()}forEachFeatureAtPixel(t,e,i){if(!this.frameState_||!this.renderer_)return;const n=this.getCoordinateFromPixelInternal(t),r=void 0!==(i=void 0!==i?i:{}).hitTolerance?i.hitTolerance:0,s=void 0!==i.layerFilter?i.layerFilter:l,o=!1!==i.checkWrapped;return this.renderer_.forEachFeatureAtCoordinate(n,this.frameState_,r,o,e,null,s,null)}getFeaturesAtPixel(t,e){const i=[];return this.forEachFeatureAtPixel(t,(function(t){i.push(t)}),e),i}getAllLayers(){const t=[];return function e(i){i.forEach((function(i){i instanceof Mo?e(i.getLayers()):t.push(i)}))}(this.getLayers()),t}hasFeatureAtPixel(t,e){if(!this.frameState_||!this.renderer_)return!1;const i=this.getCoordinateFromPixelInternal(t),n=void 0!==(e=void 0!==e?e:{}).layerFilter?e.layerFilter:l,r=void 0!==e.hitTolerance?e.hitTolerance:0,s=!1!==e.checkWrapped;return this.renderer_.hasFeatureAtCoordinate(i,this.frameState_,r,s,n,null)}getEventCoordinate(t){return this.getCoordinateFromPixel(this.getEventPixel(t))}getEventCoordinateInternal(t){return this.getCoordinateFromPixelInternal(this.getEventPixel(t))}getEventPixel(t){const e=this.viewport_.getBoundingClientRect(),i=this.getSize(),n=e.width/i[0],r=e.height/i[1],s="changedTouches"in t?t.changedTouches[0]:t;return[(s.clientX-e.left)/n,(s.clientY-e.top)/r]}getTarget(){return this.get(nt)}getTargetElement(){return this.targetElement_}getCoordinateFromPixel(t){return bi(this.getCoordinateFromPixelInternal(t),this.getView().getProjection())}getCoordinateFromPixelInternal(t){const e=this.frameState_;return e?Bi(e.pixelToCoordinateTransform,t.slice()):null}getControls(){return this.controls}getOverlays(){return this.overlays_}getOverlayById(t){const e=this.overlayIdIndex_[t.toString()];return void 0!==e?e:null}getInteractions(){return this.interactions}getLayerGroup(){return this.get(et)}setLayers(t){const e=this.getLayerGroup();if(t instanceof Ct)return void e.setLayers(t);const i=e.getLayers();i.clear(),i.extend(t)}getLayers(){return this.getLayerGroup().getLayers()}getLoadingOrNotReady(){const t=this.getLayerGroup().getLayerStatesArray();for(let e=0,i=t.length;e=0;i--){const n=e[i];if(n.getMap()!==this||!n.getActive()||!this.getTargetElement())continue;if(!n.handleEvent(t)||t.propagationStopped)break}}}handlePostRender(){const t=this.frameState_,e=this.tileQueue_;if(!e.isEmpty()){let i=this.maxTilesLoading_,n=i;if(t){const e=t.viewHints;if(e[Kt]||e[Ht]){const e=Date.now()-t.time>8;i=e?0:8,n=e?0:2}}e.getTilesLoading(){this.postRenderTimeoutHandle_=void 0,this.handlePostRender()}),0))}setLayerGroup(t){const e=this.getLayerGroup();e&&this.handleLayerRemove_(new Ro("removelayer",e)),this.set(et,t)}setSize(t){this.set(it,t)}setTarget(t){this.set(nt,t)}setView(t){if(!t||t instanceof Wn)return void this.set(rt,t);this.set(rt,new Wn);const e=this;t.then((function(t){e.setView(new Wn(t))}))}updateSize(){const t=this.getTargetElement();let e;if(t){const i=getComputedStyle(t),n=t.offsetWidth-parseFloat(i.borderLeftWidth)-parseFloat(i.paddingLeft)-parseFloat(i.paddingRight)-parseFloat(i.borderRightWidth),r=t.offsetHeight-parseFloat(i.borderTopWidth)-parseFloat(i.paddingTop)-parseFloat(i.paddingBottom)-parseFloat(i.borderBottomWidth);isNaN(n)||isNaN(r)||(e=[n,r],!pr(e)&&(t.offsetWidth||t.offsetHeight||t.getClientRects().length)&&oi("No map visible because the map container's width or height are 0."))}const i=this.getSize();!e||i&&a(e,i)||(this.setSize(e),this.updateViewportSize_(e))}updateViewportSize_(t){const e=this.getView();e&&e.setViewportSize(t)}};class Ia extends A{constructor(t){if(super(),this.on,this.once,this.un,this.id_=void 0,this.geometryName_="geometry",this.style_=null,this.styleFunction_=void 0,this.geometryChangeKey_=null,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),t)if("function"==typeof t.getSimplifiedGeometry){const e=t;this.setGeometry(e)}else{const e=t;this.setProperties(e)}}clone(){const t=new Ia(this.hasProperties()?this.getProperties():null);t.setGeometryName(this.getGeometryName());const e=this.getGeometry();e&&t.setGeometry(e.clone());const i=this.getStyle();return i&&t.setStyle(i),t}getGeometry(){return this.get(this.geometryName_)}getId(){return this.id_}getGeometryName(){return this.geometryName_}getStyle(){return this.style_}getStyleFunction(){return this.styleFunction_}handleGeometryChange_(){this.changed()}handleGeometryChanged_(){this.geometryChangeKey_&&(I(this.geometryChangeKey_),this.geometryChangeKey_=null);const t=this.getGeometry();t&&(this.geometryChangeKey_=T(t,m,this.handleGeometryChange_,this)),this.changed()}setGeometry(t){this.set(this.geometryName_,t)}setStyle(t){this.style_=t,this.styleFunction_=t?function(t){if("function"==typeof t)return t;let e;if(Array.isArray(t))e=t;else{At("function"==typeof t.getZIndex,"Expected an `ol/style/Style` or an array of `ol/style/Style.js`");e=[t]}return function(){return e}}(t):void 0,this.changed()}setId(t){this.id_=t,this.changed()}setGeometryName(t){this.removeChangeListener(this.geometryName_,this.handleGeometryChanged_),this.geometryName_=t,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),this.handleGeometryChanged_()}}class Ma extends Qi{constructor(t){super(),this.geometries_=t,this.changeEventsKeys_=[],this.listenGeometriesChange_()}unlistenGeometriesChange_(){this.changeEventsKeys_.forEach(I),this.changeEventsKeys_.length=0}listenGeometriesChange_(){const t=this.geometries_;for(let e=0,i=t.length;et.clone()))}var Fa=Ma;function Pa(t,e,i,r,s,o,a){let l,h;const u=(i-e)/r;if(1===u)l=e;else if(2===u)l=e,h=s;else if(0!==u){let o=t[e],a=t[e+1],u=0;const c=[0];for(let n=e+r;n>1),s=+i(t[r],e),s<0?o=r+1:(a=r,l=!s);return l?o:~o}(c,d);p<0?(h=(d-c[-p-2])/(c[-p-1]-c[-p-2]),l=e+(-p-2)*r):l=e+p*r}a=a>1?a:2,o=o||new Array(a);for(let e=0;e>1;r{if(t===this.squaredTolerance_)return this.simplifiedGeometry_;this.simplifiedGeometry_=this.clone(),e&&this.simplifiedGeometry_.applyTransform(e);const i=this.simplifiedGeometry_.getFlatCoordinates();let n;switch(this.type_){case"LineString":i.length=dn(i,0,this.simplifiedGeometry_.flatCoordinates_.length,this.simplifiedGeometry_.stride_,t,i,0),n=[i.length];break;case"MultiLineString":n=[],i.length=pn(i,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,t,i,0,n);break;case"Polygon":n=[],i.length=mn(i,0,this.simplifiedGeometry_.ends_,this.simplifiedGeometry_.stride_,Math.sqrt(t),i,0,n)}return n&&(this.simplifiedGeometry_=new qa(this.type_,i,n,2,this.properties_,this.id_)),this.squaredTolerance_=t,this.simplifiedGeometry_})),this}}qa.prototype.getFlatCoordinates=qa.prototype.getOrientedFlatCoordinates;class Wa{constructor(t,e,i,n){this.minX=t,this.maxX=e,this.minY=i,this.maxY=n}contains(t){return this.containsXY(t[1],t[2])}containsTileRange(t){return this.minX<=t.minX&&t.maxX<=this.maxX&&this.minY<=t.minY&&t.maxY<=this.maxY}containsXY(t,e){return this.minX<=t&&t<=this.maxX&&this.minY<=e&&e<=this.maxY}equals(t){return this.minX==t.minX&&this.minY==t.minY&&this.maxX==t.maxX&&this.maxY==t.maxY}extend(t){t.minXthis.maxX&&(this.maxX=t.maxX),t.minYthis.maxY&&(this.maxY=t.maxY)}getHeight(){return this.maxY-this.minY+1}getSize(){return[this.getWidth(),this.getHeight()]}getWidth(){return this.maxX-this.minX+1}intersects(t){return this.minX<=t.maxX&&this.maxX>=t.minX&&this.minY<=t.maxY&&this.maxY>=t.minY}}function Xa(t,e,i,n,r){return void 0!==r?(r.minX=t,r.maxX=e,r.minY=i,r.maxY=n,r):new Wa(t,e,i,n)}function Ba(t,e,i,n){return void 0!==n?(n[0]=t,n[1]=e,n[2]=i,n):[t,e,i]}function Va(t,e,i){return t+"/"+e+"/"+i}function Ya(t){return Va(t[0],t[1],t[2])}function Za(t){return t.split("/").map(Number)}const Ua=[0,0,0];var $a=class{constructor(t){let e;if(this.minZoom=void 0!==t.minZoom?t.minZoom:0,this.resolutions_=t.resolutions,At(function(t,e,i){const r=e||n;return t.every((function(e,n){if(0===n)return!0;const s=r(t[n-1],e);return!(s>0||i&&0===s)}))}(this.resolutions_,((t,e)=>e-t),!0),"`resolutions` must be sorted in descending order"),!t.origins)for(let t=0,i=this.resolutions_.length-1;t{const n=new Wa(Math.min(0,t[0]),Math.max(t[0]-1,-1),Math.min(0,t[1]),Math.max(t[1]-1,-1));if(i){const t=this.getTileRangeForExtentAndZ(i,e);n.minX=Math.max(t.minX,n.minX),n.maxX=Math.min(t.maxX,n.maxX),n.minY=Math.max(t.minY,n.minY),n.maxY=Math.min(t.maxY,n.maxY)}return n})):i&&this.calculateTileRanges_(i)}forEachTileCoord(t,e,i){const n=this.getTileRangeForExtentAndZ(t,e);for(let t=n.minX,r=n.maxX;t<=r;++t)for(let r=n.minY,s=n.maxY;r<=s;++r)i([e,t,r])}forEachTileCoordParentTileRange(t,e,i,n){let r,s,o,a=null,l=t[0]-1;for(2===this.zoomFactor_?(s=t[1],o=t[2]):a=this.getTileCoordExtent(t,n);l>=this.minZoom;){if(void 0!==s&&void 0!==o?(s=Math.floor(s/2),o=Math.floor(o/2),r=Xa(s,s,o,o,i)):r=this.getTileRangeForExtentAndZ(a,l,i),e(l,r))return!0;--l}return!1}getExtent(){return this.extent_}getMaxZoom(){return this.maxZoom}getMinZoom(){return this.minZoom}getOrigin(t){return this.origin_?this.origin_:this.origins_[t]}getResolution(t){return this.resolutions_[t]}getResolutions(){return this.resolutions_}getTileCoordChildTileRange(t,e,i){if(t[0]this.maxZoom||ea&&(this.instructions.push([tl,a,h,t,i,yn,r]),this.hitDetectionInstructions.push([tl,a,h,t,n||i,yn,r]));break;case"Point":l=t.getFlatCoordinates(),this.coordinates.push(l[0],l[1]),h=this.coordinates.length,this.instructions.push([tl,a,h,t,i,void 0,r]),this.hitDetectionInstructions.push([tl,a,h,t,n||i,void 0,r])}this.endGeometry(e)}beginGeometry(t,e,i){this.beginGeometryInstruction1_=[Ka,e,0,t,i],this.instructions.push(this.beginGeometryInstruction1_),this.beginGeometryInstruction2_=[Ka,e,0,t,i],this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)}finish(){return{instructions:this.instructions,hitDetectionInstructions:this.hitDetectionInstructions,coordinates:this.coordinates}}reverseHitDetectionInstructions(){const t=this.hitDetectionInstructions;let e;t.reverse();const i=t.length;let n,r,o=-1;for(e=0;ethis.maxLineWidth&&(this.maxLineWidth=i.lineWidth,this.bufferedMaxExtent_=null)}else i.strokeStyle=void 0,i.lineCap=void 0,i.lineDash=null,i.lineDashOffset=void 0,i.lineJoin=void 0,i.lineWidth=void 0,i.miterLimit=void 0}createFill(t){const e=t.fillStyle,i=[ol,e];return"string"!=typeof e&&i.push(t.fillPatternScale),i}applyStroke(t){this.instructions.push(this.createStroke(t))}createStroke(t){return[al,t.strokeStyle,t.lineWidth*this.pixelRatio,t.lineCap,t.lineJoin,t.miterLimit,this.applyPixelRatio(t.lineDash),t.lineDashOffset*this.pixelRatio]}updateFillStyle(t,e){const i=t.fillStyle;"string"==typeof i&&t.currentFillStyle==i||(void 0!==i&&this.instructions.push(e.call(this,t)),t.currentFillStyle=i)}updateStrokeStyle(t,e){const i=t.strokeStyle,n=t.lineCap,r=t.lineDash,s=t.lineDashOffset,o=t.lineJoin,l=t.lineWidth,h=t.miterLimit;(t.currentStrokeStyle!=i||t.currentLineCap!=n||r!=t.currentLineDash&&!a(t.currentLineDash,r)||t.currentLineDashOffset!=s||t.currentLineJoin!=o||t.currentLineWidth!=l||t.currentMiterLimit!=h)&&(void 0!==i&&e.call(this,t),t.currentStrokeStyle=i,t.currentLineCap=n,t.currentLineDash=r,t.currentLineDashOffset=s,t.currentLineJoin=o,t.currentLineWidth=l,t.currentMiterLimit=h)}endGeometry(t){this.beginGeometryInstruction1_[2]=this.instructions.length,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_[2]=this.hitDetectionInstructions.length,this.beginGeometryInstruction2_=null;const e=[nl,t];this.instructions.push(e),this.hitDetectionInstructions.push(e)}getBufferedMaxExtent(){if(!this.bufferedMaxExtent_&&(this.bufferedMaxExtent_=be(this.maxExtent),this.maxLineWidth>0)){const t=this.resolution*(this.maxLineWidth+1)/2;we(this.bufferedMaxExtent_,t,this.bufferedMaxExtent_)}return this.bufferedMaxExtent_}}var fl=class extends gl{constructor(t,e,i,n){super(t,e,i,n),this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.anchorX_=void 0,this.anchorY_=void 0,this.height_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.scale_=void 0,this.width_=void 0,this.declutterMode_=void 0,this.declutterImageWithText_=void 0}drawPoint(t,e,i){if(!this.image_||this.maxExtent&&!Se(this.maxExtent,t.getFlatCoordinates()))return;this.beginGeometry(t,e,i);const n=t.getFlatCoordinates(),r=t.getStride(),s=this.coordinates.length,o=this.appendFlatPointCoordinates(n,r);this.instructions.push([il,s,o,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_*this.imagePixelRatio_,this.originY_*this.imagePixelRatio_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterMode_,this.declutterImageWithText_]),this.hitDetectionInstructions.push([il,s,o,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,1,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterMode_,this.declutterImageWithText_]),this.endGeometry(e)}drawMultiPoint(t,e,i){if(!this.image_)return;this.beginGeometry(t,e,i);const n=t.getFlatCoordinates(),r=[];for(let e=0,i=n.length;e=t){const e=(t-a+c)/c,d=Nt(i,h,e),p=Nt(n,u,e);l.push(d,p),s.push(l),l=[d,p],a==t&&(o+=r),a=0}else if(a0&&s.push(l),s}function xl(t,e,i,n,r){let s,o,a,l,h,u,c,d,p,g,f=i,m=i,y=0,_=0,x=i;for(o=i;ot&&(_>y&&(y=_,f=x,m=o),_=0,x=o-r)),a=l,c=p,d=g),h=i,u=n}return _+=l,_>y?[x,o]:[f,m]}const vl={left:0,center:.5,right:1,top:0,middle:.5,hanging:.2,alphabetic:.8,ideographic:.8,bottom:1};const wl={Circle:yl,Default:gl,Image:fl,LineString:ml,Polygon:yl,Text:class extends gl{constructor(t,e,i,n){super(t,e,i,n),this.labels_=null,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=void 0,this.textRotation_=0,this.textFillState_=null,this.fillStates={},this.fillStates[Vr]={fillStyle:Vr},this.textStrokeState_=null,this.strokeStates={},this.textState_={},this.textStates={},this.textKey_="",this.fillKey_="",this.strokeKey_="",this.declutterMode_=void 0,this.declutterImageWithText_=void 0}finish(){const t=super.finish();return t.textStates=this.textStates,t.fillStates=this.fillStates,t.strokeStates=this.strokeStates,t}drawText(t,e,i){const n=this.textFillState_,r=this.textStrokeState_,s=this.textState_;if(""===this.text_||!s||!n&&!r)return;const o=this.coordinates;let a=o.length;const l=t.getType();let h=null,u=t.getStride();if("line"!==s.placement||"LineString"!=l&&"MultiLineString"!=l&&"Polygon"!=l&&"MultiPolygon"!=l){let n=s.overflow?null:[];switch(l){case"Point":case"MultiPoint":h=t.getFlatCoordinates();break;case"LineString":h=t.getFlatMidpoint();break;case"Circle":h=t.getCenter();break;case"MultiLineString":h=t.getFlatMidpoints(),u=2;break;case"Polygon":h=t.getFlatInteriorPoint(),s.overflow||n.push(h[2]/this.resolution),u=3;break;case"MultiPolygon":const e=t.getFlatInteriorPoints();h=[];for(let t=0,i=e.length;t{const n=o[2*(t+i)]===h[i*u]&&o[2*(t+i)+1]===h[i*u+1];return n||--t,n}))}this.saveTextStates_(),(s.backgroundFill||s.backgroundStroke)&&(this.setFillStrokeStyle(s.backgroundFill,s.backgroundStroke),s.backgroundFill&&this.updateFillStyle(this.state,this.createFill),s.backgroundStroke&&(this.updateStrokeStyle(this.state,this.applyStroke),this.hitDetectionInstructions.push(this.createStroke(this.state)))),this.beginGeometry(t,e,i);let c=s.padding;if(c!=Jr&&(s.scale[0]<0||s.scale[1]<0)){let t=s.padding[0],e=s.padding[1],i=s.padding[2],n=s.padding[3];s.scale[0]<0&&(e=-e,n=-n),s.scale[1]<0&&(t=-t,i=-i),c=[t,e,i,n]}const d=this.pixelRatio;this.instructions.push([il,a,r,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[1,1],NaN,this.declutterMode_,this.declutterImageWithText_,c==Jr?Jr:c.map((function(t){return t*d})),!!s.backgroundFill,!!s.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_,this.textOffsetX_,this.textOffsetY_,n]);const p=1/d,g=this.state.fillStyle;s.backgroundFill&&(this.state.fillStyle=Vr,this.hitDetectionInstructions.push(this.createFill(this.state))),this.hitDetectionInstructions.push([il,a,r,null,NaN,NaN,NaN,1,0,0,this.textRotateWithView_,this.textRotation_,[p,p],NaN,this.declutterMode_,this.declutterImageWithText_,c,!!s.backgroundFill,!!s.backgroundStroke,this.text_,this.textKey_,this.strokeKey_,this.fillKey_?Vr:this.fillKey_,this.textOffsetX_,this.textOffsetY_,n]),s.backgroundFill&&(this.state.fillStyle=g,this.hitDetectionInstructions.push(this.createFill(this.state))),this.endGeometry(e)}else{if(!He(this.maxExtent,t.getExtent()))return;let n;if(h=t.getFlatCoordinates(),"LineString"==l)n=[h.length];else if("MultiLineString"==l)n=t.getEnds();else if("Polygon"==l)n=t.getEnds().slice(0,1);else if("MultiPolygon"==l){const e=t.getEndss();n=[];for(let t=0,i=e.length;t{const s=this.loadedTileCallback.bind(this,i,n);return t.forEachLoadedTile(e,n,r,s)}}forEachFeatureAtCoordinate(t,e,i,n,r){}getLayer(){return this.layer_}handleFontsChanged(){}handleImageChange_(t){const e=t.target;e.getState()!==dr.LOADED&&e.getState()!==dr.ERROR||this.renderIfReadyAndVisible()}loadImage(t){let e=t.getState();return e!=dr.LOADED&&e!=dr.ERROR&&t.addEventListener(m,this.boundHandleImageChange_),e==dr.IDLE&&(t.load(),e=t.getState()),e==dr.LOADED}renderIfReadyAndVisible(){const t=this.getLayer();t&&t.getVisible()&&"ready"===t.getSourceState()&&t.changed()}renderDeferred(t){}disposeInternal(){delete this.layer_,super.disposeInternal()}}class Sl{constructor(){this.instructions_=[],this.zIndex=0,this.offset_=0,this.context_=new Proxy(CanvasRenderingContext2D.prototype,{get:(t,e)=>{if("function"==typeof K()[e])return this.instructions_[this.zIndex+this.offset_]||(this.instructions_[this.zIndex+this.offset_]=[]),this.instructions_[this.zIndex+this.offset_].push(e),this.pushMethodArgs_},set:(t,e,i)=>(this.instructions_[this.zIndex+this.offset_]||(this.instructions_[this.zIndex+this.offset_]=[]),this.instructions_[this.zIndex+this.offset_].push(e,i),!0)})}pushMethodArgs_=(...t)=>(this.instructions_[this.zIndex+this.offset_].push(t),this);getContext(){return this.context_}draw(t){this.instructions_.forEach((e=>{for(let i=0,n=e.length;it[2]}else R=v>E;const I=Math.PI,M=[],k=b+n===e;let F;if(m=0,y=C,d=t[e=b],p=t[e+1],k){_(),F=Math.atan2(p-f,d-g),R&&(F+=F>0?-I:I);const t=(E+v)/2,e=(T+w)/2;return M[0]=[t,e,(S-s)/2,F,r],M}for(let t=0,c=(r=r.replace(/\n/g," ")).length;t0?-I:I),void 0!==F){let t=v-F;if(t+=t>I?-2*I:t<-I?2*I:0,Math.abs(t)>o)return null}F=v;const w=t;let b=0;for(;t0&&t.push("\n",""),t.push(e,""),t}class jl{constructor(t,e,i,n,r){this.overlaps=i,this.pixelRatio=e,this.resolution=t,this.alignAndScaleFill_,this.instructions=n.instructions,this.coordinates=n.coordinates,this.coordinateCache_={},this.renderedTransform_=[1,0,0,1,0,0],this.hitDetectionInstructions=n.hitDetectionInstructions,this.pixelCoordinates_=null,this.viewRotation_=0,this.fillStates=n.fillStates||{},this.strokeStates=n.strokeStates||{},this.textStates=n.textStates||{},this.widths_={},this.labels_={},this.zIndexContext_=r?new Sl:null}getZIndexContext(){return this.zIndexContext_}createLabel(t,e,i,n){const r=t+e+i+n;if(this.labels_[r])return this.labels_[r];const s=n?this.strokeStates[n]:null,o=i?this.fillStates[i]:null,a=this.textStates[e],l=this.pixelRatio,h=[a.scale[0]*l,a.scale[1]*l],u=Array.isArray(t),c=a.justify?vl[a.justify]:Ol(Array.isArray(t)?t[0]:t,a.textAlign||Kr),d=n&&s.lineWidth?s.lineWidth:0,p=u?t:t.split("\n").reduce(zl,[]),{width:g,height:f,widths:m,heights:y,lineWidths:_}=function(t,e){const i=[],n=[],r=[];let s=0,o=0,a=0,l=0;for(let h=0,u=e.length;h<=u;h+=2){const c=e[h];if("\n"===c||h===u){s=Math.max(s,o),r.push(o),o=0,a+=l;continue}const d=e[h+1]||t.font,p=os(d,c);i.push(p),o+=p;const g=rs(d);n.push(g),l=Math.max(l,g)}return{width:s,height:a,widths:i,heights:n,lineWidths:r}}(a,p),x=g+d,v=[],w=(x+2)*h[0],b=(f+d)*h[1],C={width:w<0?Math.floor(w):Math.ceil(w),height:b<0?Math.floor(b):Math.ceil(b),contextInstructions:v};1==h[0]&&1==h[1]||v.push("scale",h),n&&(v.push("strokeStyle",s.strokeStyle),v.push("lineWidth",d),v.push("lineCap",s.lineCap),v.push("lineJoin",s.lineJoin),v.push("miterLimit",s.miterLimit),v.push("setLineDash",[s.lineDash]),v.push("lineDashOffset",s.lineDashOffset)),i&&v.push("fillStyle",o.fillStyle),v.push("textBaseline","middle"),v.push("textAlign","center");const S=.5-c;let E=c*x+S*d;const T=[],R=[];let I,M=0,k=0,F=0,P=0;for(let t=0,e=p.length;tt?t-l:r,x=s+h>e?e-h:s,v=p[3]+_*c[0]+p[1],w=p[0]+x*c[1]+p[2],b=m-p[3],C=y-p[0];let S;return(g||0!==u)&&(kl[0]=b,Ll[0]=b,kl[1]=C,Fl[1]=C,Fl[0]=b+v,Pl[0]=Fl[0],Pl[1]=C+w,Ll[1]=Pl[1]),0!==u?(S=Yi([1,0,0,1,0,0],i,n,1,1,u,-i,-n),Bi(S,kl),Bi(S,Fl),Bi(S,Pl),Bi(S,Ll),Me(Math.min(kl[0],Fl[0],Pl[0],Ll[0]),Math.min(kl[1],Fl[1],Pl[1],Ll[1]),Math.max(kl[0],Fl[0],Pl[0],Ll[0]),Math.max(kl[1],Fl[1],Pl[1],Ll[1]),Ml)):Me(Math.min(b,b+v),Math.min(C,C+w),Math.max(b,b+v),Math.max(C,C+w),Ml),d&&(m=Math.round(m),y=Math.round(y)),{drawImageX:m,drawImageY:y,drawImageW:_,drawImageH:x,originX:l,originY:h,declutterBox:{minX:Ml[0],minY:Ml[1],maxX:Ml[2],maxY:Ml[3],value:f},canvasTransform:S,scale:c}}replayImageOrLabel_(t,e,i,n,r,s,o){const a=!(!s&&!o),l=n.declutterBox,h=o?o[2]*n.scale[0]/2:0;return l.minX-h<=e[0]&&l.maxX+h>=0&&l.minY-h<=e[1]&&l.maxY+h>=0&&(a&&this.replayTextBackground_(t,kl,Fl,Pl,Ll,s,o),ls(t,n.canvasTransform,r,i,n.originX,n.originY,n.drawImageW,n.drawImageH,n.drawImageX,n.drawImageY,n.scale)),!0}fill_(t){const e=this.alignAndScaleFill_;if(e){const i=Bi(this.renderedTransform_,[0,0]),n=512*this.pixelRatio;t.save(),t.translate(i[0]%n,i[1]%n),1!==e&&t.scale(e,e),t.rotate(this.viewRotation_)}t.fill(),e&&t.restore()}setStrokeStyle_(t,e){t.strokeStyle=e[1],t.lineWidth=e[2],t.lineCap=e[3],t.lineJoin=e[4],t.miterLimit=e[5],t.lineDashOffset=e[7],t.setLineDash(e[6])}drawLabelWithPointPlacement_(t,e,i,n){const r=this.textStates[e],s=this.createLabel(t,e,n,i),o=this.strokeStates[i],a=this.pixelRatio,l=Ol(Array.isArray(t)?t[0]:t,r.textAlign||Kr),h=vl[r.textBaseline||Hr],u=o&&o.lineWidth?o.lineWidth:0;return{label:s,anchorX:l*(s.width/a-2*r.scale[0])+2*(.5-l)*u,anchorY:h*s.height/a+2*(.5-h)*u}}execute_(t,e,i,n,r,s,o,l){const h=this.zIndexContext_;let u;var c,d;this.pixelCoordinates_&&a(i,this.renderedTransform_)?u=this.pixelCoordinates_:(this.pixelCoordinates_||(this.pixelCoordinates_=[]),u=Ki(this.coordinates,0,this.coordinates.length,2,i,this.pixelCoordinates_),c=this.renderedTransform_,d=i,c[0]=d[0],c[1]=d[1],c[2]=d[2],c[3]=d[3],c[4]=d[4],c[5]=d[5]);let p=0;const g=n.length;let f,m,y,_,x,v,w,b,C,S,E,T,R,I=0,M=0,k=0,F=null,P=null;const L=this.coordinateCache_,A=this.viewRotation_,D=Math.round(1e12*Math.atan2(-i[1],i[0]))/1e12,O={context:t,pixelRatio:this.pixelRatio,resolution:this.resolution,rotation:A},z=this.instructions!=n||this.overlaps?0:200;let j,G,N,q;for(;pz&&(this.fill_(t),M=0),k>z&&(t.stroke(),k=0),M||k||(t.beginPath(),x=NaN,v=NaN),++p;break;case Ja:I=i[1];const n=u[I],a=u[I+1],c=u[I+2]-n,d=u[I+3]-a,g=Math.sqrt(c*c+d*d);t.moveTo(n+g,a),t.arc(n,a,g,0,2*Math.PI,!0),++p;break;case Qa:t.closePath(),++p;break;case tl:I=i[1],f=i[2];const W=i[3],X=i[4],B=i[5];O.geometry=W,O.feature=j,p in L||(L[p]=[]);const V=L[p];B?B(u,I,f,2,V):(V[0]=u[I],V[1]=u[I+1],V.length=2),h&&(h.zIndex=i[6]),X(V,O),++p;break;case il:I=i[1],f=i[2],C=i[3],m=i[4],y=i[5];let Y=i[6];const Z=i[7],U=i[8],$=i[9],K=i[10];let H=i[11];const J=i[12];let Q=i[13];_=i[14]||"declutter";const tt=i[15];if(!C&&i.length>=20){S=i[19],E=i[20],T=i[21],R=i[22];const t=this.drawLabelWithPointPlacement_(S,E,T,R);C=t.label,i[3]=C;const e=i[23];m=(t.anchorX-e)*this.pixelRatio,i[4]=m;const n=i[24];y=(t.anchorY-n)*this.pixelRatio,i[5]=y,Y=C.height,i[6]=Y,Q=C.width,i[13]=Q}let et,it,nt,rt;i.length>25&&(et=i[25]),i.length>17?(it=i[16],nt=i[17],rt=i[18]):(it=Jr,nt=!1,rt=!1),K&&D?H+=A:K||D||(H-=A);let st=0;for(;I!Nl.includes(t)));class Wl{constructor(t,e,i,n,r,s,o){this.maxExtent_=t,this.overlaps_=n,this.pixelRatio_=i,this.resolution_=e,this.renderBuffer_=s,this.executorsByZIndex_={},this.hitDetectionContext_=null,this.hitDetectionTransform_=[1,0,0,1,0,0],this.renderedContext_=null,this.deferredZIndexContexts_={},this.createExecutors_(r,o)}clip(t,e){const i=this.getClipCoords(e);t.beginPath(),t.moveTo(i[0],i[1]),t.lineTo(i[2],i[3]),t.lineTo(i[4],i[5]),t.lineTo(i[6],i[7]),t.clip()}createExecutors_(t,e){for(const i in t){let n=this.executorsByZIndex_[i];void 0===n&&(n={},this.executorsByZIndex_[i]=n);const r=t[i];for(const t in r){const i=r[t];n[t]=new jl(this.resolution_,this.pixelRatio_,this.overlaps_,i,e)}}}hasExecutors(t){for(const e in this.executorsByZIndex_){const i=this.executorsByZIndex_[e];for(let e=0,n=t.length;ei)break;let a=n[o];a||(a=[],n[o]=a),a.push(4*((t+r)*e+(t+s))+3),r>0&&a.push(4*((t-r)*e+(t+s))+3),s>0&&(a.push(4*((t+r)*e+(t-s))+3),r>0&&a.push(4*((t-r)*e+(t-s))+3))}const r=[];for(let t=0,e=n.length;t0){if(!o||"Image"!==p&&"Text"!==p||o.includes(t)){const i=(d[n]-3)/4,o=r-i%a,l=r-(i/a|0),h=s(t,e,o*o+l*l);if(h)return h}u.clearRect(0,0,a,a);break}}const f=Object.keys(this.executorsByZIndex_).map(Number);let m,y,_,x,v;for(f.sort(n),m=f.length-1;m>=0;--m){const t=f[m].toString();for(_=this.executorsByZIndex_[t],y=Gl.length-1;y>=0;--y)if(p=Gl[y],x=_[p],void 0!==x&&(v=x.executeHitDetection(u,l,i,g,c),v))return v}}getClipCoords(t){const e=this.maxExtent_;if(!e)return null;const i=e[0],n=e[1],r=e[2],s=e[3],o=[i,n,i,s,r,s,r,n];return Ki(o,0,8,2,t,o),o}isEmpty(){return g(this.executorsByZIndex_)}execute(t,e,i,r,s,o,a){const l=Object.keys(this.executorsByZIndex_).map(Number);let h,u,c,d,p,g;for(l.sort(n),o=o||Gl,a&&l.reverse(),h=0,u=l.length;h{t.draw(this.renderedContext_),t.clear()}))}}const Xl={};var Bl=class extends pl{constructor(t,e,i,n,r,s,o){super(),this.context_=t,this.pixelRatio_=e,this.extent_=i,this.transform_=n,this.transformRotation_=n?qt(Math.atan2(n[1],n[0]),10):0,this.viewRotation_=r,this.squaredTolerance_=s,this.userTransform_=o,this.contextFillState_=null,this.contextStrokeState_=null,this.contextTextState_=null,this.fillState_=null,this.strokeState_=null,this.image_=null,this.imageAnchorX_=0,this.imageAnchorY_=0,this.imageHeight_=0,this.imageOpacity_=0,this.imageOriginX_=0,this.imageOriginY_=0,this.imageRotateWithView_=!1,this.imageRotation_=0,this.imageScale_=[0,0],this.imageWidth_=0,this.text_="",this.textOffsetX_=0,this.textOffsetY_=0,this.textRotateWithView_=!1,this.textRotation_=0,this.textScale_=[0,0],this.textFillState_=null,this.textStrokeState_=null,this.textState_=null,this.pixelCoordinates_=[],this.tmpLocalTransform_=[1,0,0,1,0,0]}drawImages_(t,e,i,n){if(!this.image_)return;const r=Ki(t,e,i,n,this.transform_,this.pixelCoordinates_),s=this.context_,o=this.tmpLocalTransform_,a=s.globalAlpha;1!=this.imageOpacity_&&(s.globalAlpha=a*this.imageOpacity_);let l=this.imageRotation_;0===this.transformRotation_&&(l-=this.viewRotation_),this.imageRotateWithView_&&(l+=this.viewRotation_);for(let t=0,e=r.length;tt*this.pixelRatio_)),lineDashOffset:(r||0)*this.pixelRatio_,lineJoin:void 0!==s?s:Ur,lineWidth:(void 0!==o?o:1)*this.pixelRatio_,miterLimit:void 0!==a?a:10,strokeStyle:Xr(t||$r)}}else this.strokeState_=null}setImageStyle(t){let e;if(!t||!(e=t.getSize()))return void(this.image_=null);const i=t.getPixelRatio(this.pixelRatio_),n=t.getAnchor(),r=t.getOrigin();this.image_=t.getImage(this.pixelRatio_),this.imageAnchorX_=n[0]*i,this.imageAnchorY_=n[1]*i,this.imageHeight_=e[1]*i,this.imageOpacity_=t.getOpacity(),this.imageOriginX_=r[0],this.imageOriginY_=r[1],this.imageRotateWithView_=t.getRotateWithView(),this.imageRotation_=t.getRotation();const s=t.getScaleArray();this.imageScale_=[s[0]*this.pixelRatio_/i,s[1]*this.pixelRatio_/i],this.imageWidth_=e[0]*i}setTextStyle(t){if(t){const e=t.getFill();if(e){const t=e.getColor();this.textFillState_={fillStyle:Xr(t||Vr)}}else this.textFillState_=null;const i=t.getStroke();if(i){const t=i.getColor(),e=i.getLineCap(),n=i.getLineDash(),r=i.getLineDashOffset(),s=i.getLineJoin(),o=i.getWidth(),a=i.getMiterLimit();this.textStrokeState_={lineCap:void 0!==e?e:Yr,lineDash:n||Zr,lineDashOffset:r||0,lineJoin:void 0!==s?s:Ur,lineWidth:void 0!==o?o:1,miterLimit:void 0!==a?a:10,strokeStyle:Xr(t||$r)}}else this.textStrokeState_=null;const n=t.getFont(),r=t.getOffsetX(),s=t.getOffsetY(),o=t.getRotateWithView(),a=t.getRotation(),l=t.getScaleArray(),h=t.getText(),u=t.getTextAlign(),c=t.getTextBaseline();this.textState_={font:void 0!==n?n:Br,textAlign:void 0!==u?u:Kr,textBaseline:void 0!==c?c:Hr},this.text_=void 0!==h?Array.isArray(h)?h.reduce(((t,e,i)=>t+(i%2?" ":e)),""):h:"",this.textOffsetX_=void 0!==r?this.pixelRatio_*r:0,this.textOffsetY_=void 0!==s?this.pixelRatio_*s:0,this.textRotateWithView_=void 0!==o&&o,this.textRotation_=void 0!==a?a:0,this.textScale_=[this.pixelRatio_*l[0],this.pixelRatio_*l[1]]}else this.text_=""}};const Vl=.5;function Yl(t,e,i,r,s,o,a,l,h){const u=h?Si(s):s,c=U(t[0]*Vl,t[1]*Vl);c.imageSmoothingEnabled=!1;const d=c.canvas,p=new Bl(c,Vl,s,null,a,l,h?_i(wi,h):null),g=i.length,f=Math.floor(16777215/g),m={};for(let t=1;t<=g;++t){const e=i[t-1],n=e.getStyleFunction()||r;if(!n)continue;let s=n(e,o);if(!s)continue;Array.isArray(s)||(s=[s]);const a=(t*f).toString(16).padStart(7,"#00000");for(let t=0,i=s.length;t0;return c&&Promise.all(l).then((()=>r(null))),function(t,e,i,n,r,s,o){const a=i.getGeometryFunction()(e);if(!a)return;const l=a.simplifyTransformed(n,r),h=i.getRenderer();if(h)th(t,l,i,e,o);else{(0,$l[l.getType()])(t,l,i,e,o,s)}}(t,e,i,n,s,o,a),c}function th(t,e,i,n,r){if("GeometryCollection"==e.getType()){const s=e.getGeometries();for(let e=0,o=s.length;e{if(!this.hitDetectionImageData_&&!this.animatingOrInteracting_){const t=[this.context.canvas.width,this.context.canvas.height];Bi(this.pixelTransform,t);const e=this.renderedCenter_,i=this.renderedResolution_,n=this.renderedRotation_,r=this.renderedProjection_,s=this.wrappedRenderedExtent_,o=this.getLayer(),a=[],l=t[0]*Vl,h=t[1]*Vl;a.push(this.getRenderTransform(e,i,n,Vl,l,h,0).slice());const u=o.getSource(),c=r.getExtent();if(u.getWrapX()&&r.canWrapX()&&!Ee(c,s)){let t=s[0];const r=Ke(c);let o,u=0;for(;tc[2];)++u,o=r*u,a.push(this.getRenderTransform(e,i,n,Vl,l,h,o).slice()),t-=r}this.hitDetectionImageData_=Yl(t,a,this.renderedFeatures_,o.getStyleFunction(),s,i,n,Hl(i,this.renderedPixelRatio_),null)}e(Zl(t,this.renderedFeatures_,this.hitDetectionImageData_))}))}forEachFeatureAtCoordinate(t,e,i,n,r){if(!this.replayGroup_)return;const s=e.viewState.resolution,o=e.viewState.rotation,a=this.getLayer(),l={},h=function(t,e,i){const s=P(t),o=l[s];if(o){if(!0!==o&&iu=n.forEachFeatureAtCoordinate(t,s,o,i,h,d&&e.declutter[d]?e.declutter[d].all().map((t=>t.value)):null))),u}handleFontsChanged(){const t=this.getLayer();t.getVisible()&&this.replayGroup_&&t.changed()}handleStyleImageChange_(t){this.renderIfReadyAndVisible()}prepareFrame(t){const e=this.getLayer(),i=e.getSource();if(!i)return!1;const n=t.viewHints[Kt],r=t.viewHints[Ht],s=e.getUpdateWhileAnimating(),o=e.getUpdateWhileInteracting();if(this.ready&&!s&&n||!o&&r)return this.animatingOrInteracting_=!0,!0;this.animatingOrInteracting_=!1;const l=t.extent,h=t.viewState,u=h.projection,c=h.resolution,d=t.pixelRatio,p=e.getRevision(),g=e.getRenderBuffer();let f=e.getRenderOrder();void 0===f&&(f=Kl);const m=h.center.slice(),y=we(l,g*c),_=y.slice(),x=[y.slice()],v=u.getExtent();if(i.getWrapX()&&u.canWrapX()&&!Ee(v,t.extent)){const t=Ke(v),e=Math.max(Ke(y)/2,t);y[0]=v[0]-e,y[2]=v[2]+e,ni(m,u);const i=ti(x[0],u);i[0]v[0]&&i[2]>v[2]&&x.push([i[0]-t,i[1],i[2]-t,i[3]])}if(this.ready&&this.renderedResolution_==c&&this.renderedRevision_==p&&this.renderedRenderOrder_==f&&Ee(this.wrappedRenderedExtent_,y))return a(this.renderedExtent_,_)||(this.hitDetectionImageData_=null,this.renderedExtent_=_),this.renderedCenter_=m,this.replayGroupChanged=!1,!0;this.replayGroup_=null;const w=new bl(Jl(c,d),y,c,d);for(let t=0,e=x.length;t{let n;const r=t.getStyleFunction()||e.getStyleFunction();if(r&&(n=r(t,c)),n){const e=this.renderFeature(t,b,n,w,undefined,this.getLayer().getDeclutter(),i);C=C&&!e}},E=Si(y),T=i.getFeaturesInExtent(E);f&&T.sort(f);for(let t=0,e=T.length;t=200&&a.status<300){const t=e.getType();let n;"json"==t?n=JSON.parse(a.responseText):"text"==t?n=a.responseText:"xml"==t?(n=a.responseXML,n||(n=(new DOMParser).parseFromString(a.responseText,"application/xml"))):"arraybuffer"==t&&(n=a.response),n?s(e.readFeatures(n,{extent:i,featureProjection:r}),e.readProjection(n)):o()}else o()},a.onerror=o,a.send()}function yh(t,e){return function(i,n,r,s,o){const a=this;mh(t,e,i,n,r,(function(t,e){a.addFeatures(t),void 0!==s&&s(t)}),o||u)}}class _h extends t{constructor(t,e,i){super(t),this.feature=e,this.features=i}}var xh=class extends rh{constructor(t){super({attributions:(t=t||{}).attributions,interpolate:!0,projection:void 0,state:"ready",wrapX:void 0===t.wrapX||t.wrapX}),this.on,this.once,this.un,this.loader_=u,this.format_=t.format,this.overlaps_=void 0===t.overlaps||t.overlaps,this.url_=t.url,void 0!==t.loader?this.loader_=t.loader:void 0!==this.url_&&(At(this.format_,"`format` must be set when `url` is set"),this.loader_=yh(this.url_,this.format_)),this.strategy_=void 0!==t.strategy?t.strategy:ph;const e=void 0===t.useSpatialIndex||t.useSpatialIndex;let i,n;this.featuresRtree_=e?new nh:null,this.loadedExtentsRtree_=new nh,this.loadingExtentsCount_=0,this.nullGeometryFeatures_={},this.idIndex_={},this.uidIndex_={},this.featureChangeKeys_={},this.featuresCollection_=null,Array.isArray(t.features)?n=t.features:t.features&&(i=t.features,n=i.getArray()),e||void 0!==i||(i=new Ct(n)),void 0!==n&&this.addFeaturesInternal(n),void 0!==i&&this.bindFeaturesCollection_(i)}addFeature(t){this.addFeatureInternal(t),this.changed()}addFeatureInternal(t){const e=P(t);if(!this.addToIndex_(e,t))return void(this.featuresCollection_&&this.featuresCollection_.remove(t));this.setupChangeEvents_(e,t);const i=t.getGeometry();if(i){const e=i.getExtent();this.featuresRtree_&&this.featuresRtree_.insert(e,t)}else this.nullGeometryFeatures_[e]=t;this.dispatchEvent(new _h(oh,t))}setupChangeEvents_(t,i){i instanceof qa||(this.featureChangeKeys_[t]=[T(i,m,this.handleFeatureChange_,this),T(i,e,this.handleFeatureChange_,this)])}addToIndex_(t,e){let i=!0;if(void 0!==e.getId()){const t=String(e.getId());if(t in this.idIndex_)if(e instanceof qa){const n=this.idIndex_[t];n instanceof qa?Array.isArray(n)?n.push(e):this.idIndex_[t]=[n,e]:i=!1}else i=!1;else this.idIndex_[t]=e}return i&&(At(!(t in this.uidIndex_),"The passed `feature` was already added to the source"),this.uidIndex_[t]=e),i}addFeatures(t){this.addFeaturesInternal(t),this.changed()}addFeaturesInternal(t){const e=[],i=[],n=[];for(let e=0,n=t.length;e{e||(e=!0,this.addFeature(t.element),e=!1)})),t.addEventListener(vt,(t=>{e||(e=!0,this.removeFeature(t.element),e=!1)})),this.featuresCollection_=t}clear(t){if(t){for(const t in this.featureChangeKeys_){this.featureChangeKeys_[t].forEach(I)}this.featuresCollection_||(this.featureChangeKeys_={},this.idIndex_={},this.uidIndex_={})}else if(this.featuresRtree_){const t=t=>{this.removeFeatureInternal(t)};this.featuresRtree_.forEach(t);for(const t in this.nullGeometryFeatures_)this.removeFeatureInternal(this.nullGeometryFeatures_[t])}this.featuresCollection_&&this.featuresCollection_.clear(),this.featuresRtree_&&this.featuresRtree_.clear(),this.nullGeometryFeatures_={};const e=new _h(lh);this.dispatchEvent(e),this.changed()}forEachFeature(t){if(this.featuresRtree_)return this.featuresRtree_.forEach(t);this.featuresCollection_&&this.featuresCollection_.forEach(t)}forEachFeatureAtCoordinateDirect(t,e){const i=[t[0],t[1],t[0],t[1]];return this.forEachFeatureInExtent(i,(function(i){const n=i.getGeometry();if(n instanceof qa||n.intersectsCoordinate(t))return e(i)}))}forEachFeatureInExtent(t,e){if(this.featuresRtree_)return this.featuresRtree_.forEachInExtent(t,e);this.featuresCollection_&&this.featuresCollection_.forEach(e)}forEachFeatureIntersectingExtent(t,e){return this.forEachFeatureInExtent(t,(function(i){const n=i.getGeometry();if(n instanceof qa||n.intersectsExtent(t)){const t=e(i);if(t)return t}}))}getFeaturesCollection(){return this.featuresCollection_}getFeatures(){let t;return this.featuresCollection_?t=this.featuresCollection_.getArray().slice(0):this.featuresRtree_&&(t=this.featuresRtree_.getAll(),g(this.nullGeometryFeatures_)||o(t,Object.values(this.nullGeometryFeatures_))),t}getFeaturesAtCoordinate(t){const e=[];return this.forEachFeatureAtCoordinateDirect(t,(function(t){e.push(t)})),e}getFeaturesInExtent(t,e){if(this.featuresRtree_){if(!(e&&e.canWrapX()&&this.getWrapX()))return this.featuresRtree_.getInExtent(t);const i=function(t,e){if(e.canWrapX()){const i=e.getExtent();if(!isFinite(t[0])||!isFinite(t[2]))return[[i[0],t[1],i[2],t[3]]];ti(t,e);const n=Ke(i);if(Ke(t)>n)return[[i[0],t[1],i[2],t[3]]];if(t[0]i[2])return[[t[0],t[1],i[2],t[3]],[i[0],t[1],t[2]-n,t[3]]]}return[t]}(t,e);return[].concat(...i.map((t=>this.featuresRtree_.getInExtent(t))))}return this.featuresCollection_?this.featuresCollection_.getArray().slice(0):[]}getClosestFeatureToCoordinate(t,e){const i=t[0],n=t[1];let r=null;const s=[NaN,NaN];let o=1/0;const a=[-1/0,-1/0,1/0,1/0];return e=e||l,this.featuresRtree_.forEachInExtent(a,(function(t){if(e(t)){const e=t.getGeometry(),l=o;if(o=e instanceof qa?0:e.closestPointXY(i,n,s,o),o{--this.loadingExtentsCount_,this.dispatchEvent(new _h(ch,void 0,t))}),(()=>{--this.loadingExtentsCount_,this.dispatchEvent(new _h(dh))})),n.insert(s,{extent:s.slice()}))}this.loading=!(this.loader_.length<4)&&this.loadingExtentsCount_>0}refresh(){this.clear(!0),this.loadedExtentsRtree_.clear(),super.refresh()}removeLoadedExtent(t){const e=this.loadedExtentsRtree_;let i;e.forEachInExtent(t,(function(e){if(Le(e.extent,t))return i=e,!0})),i&&e.remove(i)}removeFeatures(t){const e=[];for(let i=0,n=t.length;i0&&this.changed()}removeFeature(t){if(!t)return;this.removeFeatureInternal(t)&&this.changed()}removeFeatureInternal(t){const e=P(t);e in this.nullGeometryFeatures_?delete this.nullGeometryFeatures_[e]:this.featuresRtree_&&this.featuresRtree_.remove(t);const i=this.featureChangeKeys_[e];if(!i)return;i.forEach(I),delete this.featureChangeKeys_[e];const n=t.getId();return void 0!==n&&delete this.idIndex_[n.toString()],delete this.uidIndex_[e],this.hasListener(hh)&&this.dispatchEvent(new _h(hh,t)),t}removeFromIdIndex_(t){let e=!1;for(const i in this.idIndex_){const n=this.idIndex_[i];if(t instanceof qa&&Array.isArray(n)&&n.includes(t))n.splice(n.indexOf(t),1);else if(this.idIndex_[i]===t){delete this.idIndex_[i],e=!0;break}}return e}setLoader(t){this.loader_=t}setUrl(t){At(this.format_,"`format` must be set when `url` is set"),this.url_=t,this.setLoader(yh(t,this.format_))}};class vh extends Or{constructor(t,e,i,n,r){super(t,e,i,void 0!==r?dr.IDLE:dr.LOADED),this.loader_=void 0!==r?r:null,this.canvas_=n,this.error_=null}getError(){return this.error_}handleLoad_(t){t?(this.error_=t,this.state=dr.ERROR):this.state=dr.LOADED,this.changed()}load(){this.state==dr.IDLE&&(this.state=dr.LOADING,this.changed(),this.loader_(this.handleLoad_.bind(this)))}getImage(){return this.canvas_}}class wh extends f{constructor(t,e,i){super(),i=i||{},this.tileCoord=t,this.state=e,this.interimTile=null,this.key="",this.transition_=void 0===i.transition?250:i.transition,this.transitionStarts_={},this.interpolate=!!i.interpolate}changed(){this.dispatchEvent(m)}release(){this.state===jo.ERROR&&this.setState(jo.EMPTY)}getKey(){return this.key+"/"+this.tileCoord}getInterimTile(){let t=this.interimTile;if(!t)return this;do{if(t.getState()==jo.LOADED)return this.transition_=0,t;t=t.interimTile}while(t);return this}refreshInterimChain(){let t=this.interimTile;if(!t)return;let e=this;do{if(t.getState()==jo.LOADED){t.interimTile=null;break}t.getState()==jo.LOADING?e=t:t.getState()==jo.IDLE?e.interimTile=t.interimTile:e=t,t=e.interimTile}while(t)}getTileCoord(){return this.tileCoord}getState(){return this.state}setState(t){if(this.state!==jo.ERROR&&this.state>t)throw new Error("Tile load sequence violation");this.state=t,this.changed()}load(){k()}getAlpha(t,e){if(!this.transition_)return 1;let i=this.transitionStarts_[t];if(i){if(-1===i)return 1}else i=e,this.transitionStarts_[t]=i;const n=e-i+1e3/60;return n>=this.transition_?1:Oi(n/this.transition_)}inTransition(t){return!!this.transition_&&-1!==this.transitionStarts_[t]}endTransition(t){this.transition_&&(this.transitionStarts_[t]=-1)}}class bh extends wh{constructor(t,e,i,n,r,s){super(t,e,s),this.crossOrigin_=n,this.src_=i,this.key=i,this.image_=new Image,null!==n&&(this.image_.crossOrigin=n),this.unlisten_=null,this.tileLoadFunction_=r}getImage(){return this.image_}setImage(t){this.image_=t,this.state=jo.LOADED,this.unlistenImage_(),this.changed()}handleImageError_(){this.state=jo.ERROR,this.unlistenImage_(),this.image_=function(){const t=U(1,1);return t.fillStyle="rgba(0,0,0,0)",t.fillRect(0,0,1,1),t.canvas}(),this.changed()}handleImageLoad_(){const t=this.image_;t.naturalWidth&&t.naturalHeight?this.state=jo.LOADED:this.state=jo.EMPTY,this.unlistenImage_(),this.changed()}load(){this.state==jo.ERROR&&(this.state=jo.IDLE,this.image_=new Image,null!==this.crossOrigin_&&(this.image_.crossOrigin=this.crossOrigin_)),this.state==jo.IDLE&&(this.state=jo.LOADING,this.changed(),this.tileLoadFunction_(this,this.src_),this.unlisten_=function(t,e,i){const n=t;let r=!0,s=!1,o=!1;const a=[R(n,C,(function(){o=!0,s||e()}))];return n.src&&Y?(s=!0,n.decode().then((function(){r&&e()})).catch((function(t){r&&(o?e():i())}))):a.push(R(n,y,i)),function(){r=!1,a.forEach(I)}}(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this)))}unlistenImage_(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)}}class Ch{constructor(t){this.highWaterMark=void 0!==t?t:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}canExpireCache(){return this.highWaterMark>0&&this.getCount()>this.highWaterMark}expireCache(t){for(;this.canExpireCache();)this.pop()}clear(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}containsKey(t){return this.entries_.hasOwnProperty(t)}forEach(t){let e=this.oldest_;for(;e;)t(e.value_,e.key_,this),e=e.newer}get(t,e){const i=this.entries_[t];return At(void 0!==i,"Tried to get a value for a key that does not exist in the cache"),i===this.newest_||(i===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(i.newer.older=i.older,i.older.newer=i.newer),i.newer=null,i.older=this.newest_,this.newest_.newer=i,this.newest_=i),i.value_}remove(t){const e=this.entries_[t];return At(void 0!==e,"Tried to get a value for a key that does not exist in the cache"),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_}getCount(){return this.count_}getKeys(){const t=new Array(this.count_);let e,i=0;for(e=this.newest_;e;e=e.older)t[i++]=e.key_;return t}getValues(){const t=new Array(this.count_);let e,i=0;for(e=this.newest_;e;e=e.older)t[i++]=e.value_;return t}peekLast(){return this.oldest_.value_}peekLastKey(){return this.oldest_.key_}peekFirstKey(){return this.newest_.key_}peek(t){return this.entries_[t]?.value_}pop(){const t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_}replace(t,e){this.get(t),this.entries_[t].value_=e}set(t,e){At(!(t in this.entries_),"Tried to set a value for a key that is used already");const i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_}setSize(t){this.highWaterMark=t}}class Sh extends Ch{clear(){for(;this.getCount()>0;)this.pop().release();super.clear()}expireCache(t){for(;this.canExpireCache();){if(this.peekLast().getKey()in t)break;this.pop().release()}}pruneExceptNewestZ(){if(0===this.getCount())return;const t=Za(this.peekFirstKey())[0];this.forEach((e=>{e.tileCoord[0]!==t&&(this.remove(Ya(e.tileCoord)),e.release())}))}}const Eh=[];class Th extends wh{constructor(t,e,i,n){super(t,e,{transition:0}),this.context_={},this.executorGroups={},this.loadingSourceTiles=0,this.hitDetectionImageData={},this.replayState_={},this.sourceTiles=[],this.errorTileKeys={},this.wantedResolution,this.getSourceTiles=n.bind(void 0,this),this.wrappedTileCoord=i}getContext(t){const e=P(t);return e in this.context_||(this.context_[e]=U(1,1,Eh)),this.context_[e]}hasContext(t){return P(t)in this.context_}getImage(t){return this.hasContext(t)?this.getContext(t).canvas:null}getReplayState(t){const e=P(t);return e in this.replayState_||(this.replayState_[e]={dirty:!1,renderedRenderOrder:null,renderedResolution:NaN,renderedRevision:-1,renderedTileResolution:NaN,renderedTileRevision:-1,renderedTileZ:-1}),this.replayState_[e]}load(){this.getSourceTiles()}release(){for(const t in this.context_){const e=this.context_[t];H(e),Eh.push(e.canvas),delete this.context_[t]}super.release()}}let Rh=class extends wh{constructor(t,e,i,n,r,s){super(t,e,s),this.extent=null,this.format_=n,this.features_=null,this.loader_,this.projection=null,this.resolution,this.tileLoadFunction_=r,this.url_=i,this.key=i}getFormat(){return this.format_}getFeatures(){return this.features_}load(){this.state==jo.IDLE&&(this.setState(jo.LOADING),this.tileLoadFunction_(this,this.url_),this.loader_&&this.loader_(this.extent,this.resolution,this.projection))}onLoad(t,e){this.setFeatures(t)}onError(){this.setState(jo.ERROR)}setFeatures(t){this.features_=t,this.setState(jo.LOADED)}setLoader(t){this.loader_=t}};function Ih(t,e){const i=/\{z\}/g,n=/\{x\}/g,r=/\{y\}/g,s=/\{-y\}/g;return function(o,a,l){if(o)return t.replace(i,o[0].toString()).replace(n,o[1].toString()).replace(r,o[2].toString()).replace(s,(function(){const t=o[0],i=e.getFullTileRange(t);if(!i)throw new Error("The {-y} placeholder requires a tile grid with extent");return(i.getHeight()-o[2]-1).toString()}))}}function Mh(t,e){const i=t.length,n=new Array(i);for(let r=0;rAh({...t,geometry:e}))).flat();const n="MultiPolygon"===i.type?"Polygon":i.type;if("GeometryCollection"===n||"Circle"===n)throw new Error("Unsupported geometry type: "+n);const r=i.layout.length;return Ph(new qa(n,"Polygon"===n?function(t,e,i){return Array.isArray(e[0])?(On(t,0,e,i)||jn(t=t.slice(),0,e,i),t):(Dn(t,0,e,i)||zn(t=t.slice(),0,e,i),t)}(i.flatCoordinates,i.ends,r):i.flatCoordinates,i.ends?.flat(),r,t.properties||{},t.id).enableSimplifyTransformed(),!1,e)}function Dh(t,e){if(!t)return null;if(Array.isArray(t)){const i=t.map((t=>Dh(t,e)));return new Fa(i)}return Ph(new(0,Lh[t.type])(t.flatCoordinates,t.layout,t.ends),!1,e)}class Oh extends Fh{constructor(){super()}getType(){return"json"}readFeature(t,e){return this.readFeatureFromObject(zh(t),this.getReadOptions(t,e))}readFeatures(t,e){return this.readFeaturesFromObject(zh(t),this.getReadOptions(t,e))}readFeatureFromObject(t,e){return k()}readFeaturesFromObject(t,e){return k()}readGeometry(t,e){return this.readGeometryFromObject(zh(t),this.getReadOptions(t,e))}readGeometryFromObject(t,e){return k()}readProjection(t){return this.readProjectionFromObject(zh(t))}readProjectionFromObject(t){return k()}writeFeature(t,e){return JSON.stringify(this.writeFeatureObject(t,e))}writeFeatureObject(t,e){return k()}writeFeatures(t,e){return JSON.stringify(this.writeFeaturesObject(t,e))}writeFeaturesObject(t,e){return k()}writeGeometry(t,e){return JSON.stringify(this.writeGeometryObject(t,e))}writeGeometryObject(t,e){return k()}}function zh(t){if("string"==typeof t){const e=JSON.parse(t);return e||null}return null!==t?t:null}function jh(t,e){if(!t)return null;let i;switch(t.type){case"Point":i=function(t){const e=t.coordinates;return{type:"Point",flatCoordinates:e,layout:en(e.length)}}(t);break;case"LineString":i=function(t){const e=t.coordinates,i=e.flat();return{type:"LineString",flatCoordinates:i,ends:[i.length],layout:en(e[0]?.length||2)}}(t);break;case"Polygon":i=function(t){const e=t.coordinates,i=[],n=e[0]?.[0]?.length,r=un(i,0,e,n);return{type:"Polygon",flatCoordinates:i,ends:r,layout:en(n)}}(t);break;case"MultiPoint":i=function(t){const e=t.coordinates;return{type:"MultiPoint",flatCoordinates:e.flat(),layout:en(e[0]?.length||2)}}(t);break;case"MultiLineString":i=function(t){const e=t.coordinates,i=e[0]?.[0]?.length||2,n=[],r=un(n,0,e,i);return{type:"MultiLineString",flatCoordinates:n,ends:r,layout:en(i)}}(t);break;case"MultiPolygon":i=function(t){const e=t.coordinates,i=[],n=e[0]?.[0]?.[0].length||2,r=cn(i,0,e,n);return{type:"MultiPolygon",flatCoordinates:i,ends:r,layout:en(n)}}(t);break;case"GeometryCollection":i=function(t,e){const i=t.geometries.map((function(t){return jh(t)}));return i}(t);break;default:throw new Error("Unsupported GeoJSON type: "+t.type)}return i}function Gh(t,e){const i=(t=Ph(t,!0,e)).getType();let n;switch(i){case"Point":n=function(t,e){return{type:"Point",coordinates:t.getCoordinates()}}(t);break;case"LineString":n=function(t,e){return{type:"LineString",coordinates:t.getCoordinates()}}(t);break;case"Polygon":n=function(t,e){let i;e&&(i=e.rightHanded);return{type:"Polygon",coordinates:t.getCoordinates(i)}}(t,e);break;case"MultiPoint":n=function(t,e){return{type:"MultiPoint",coordinates:t.getCoordinates()}}(t);break;case"MultiLineString":n=function(t,e){return{type:"MultiLineString",coordinates:t.getCoordinates()}}(t);break;case"MultiPolygon":n=function(t,e){let i;e&&(i=e.rightHanded);return{type:"MultiPolygon",coordinates:t.getCoordinates(i)}}(t,e);break;case"GeometryCollection":n=function(t,e){e=Object.assign({},e),delete e.featureProjection;const i=t.getGeometriesArray().map((function(t){return Gh(t,e)}));return{type:"GeometryCollection",geometries:i}}(t,e);break;case"Circle":n={type:"GeometryCollection",geometries:[]};break;default:throw new Error("Unsupported geometry type: "+i)}return n}var Nh=class extends Oh{constructor(t){t=t||{},super(),this.dataProjection=di(t.dataProjection?t.dataProjection:"EPSG:4326"),t.featureProjection&&(this.defaultFeatureProjection=di(t.featureProjection)),t.featureClass&&(this.featureClass=t.featureClass),this.geometryName_=t.geometryName,this.extractGeometryName_=t.extractGeometryName,this.supportedMediaTypes=["application/geo+json","application/vnd.geo+json"]}readFeatureFromObject(t,e){let i=null;i="Feature"===t.type?t:{type:"Feature",geometry:t,properties:null};const n=jh(i.geometry);if(this.featureClass===qa)return Ah({geometry:n,id:i.id,properties:i.properties},e);const r=new Ia;return this.geometryName_?r.setGeometryName(this.geometryName_):this.extractGeometryName_&&i.geometry_name&&r.setGeometryName(i.geometry_name),r.setGeometry(Dh(n,e)),"id"in i&&r.setId(i.id),i.properties&&r.setProperties(i.properties,!0),r}readFeaturesFromObject(t,e){let i=null;if("FeatureCollection"===t.type){i=[];const n=t.features;for(let t=0,r=n.length;t=o.width)return null;const h=Ye(s),u=Math.floor(o.height*((s[3]-n[1])/h));return u<0||u>=o.height?null:this.getImageData(o,l,u)}renderFrame(t,e){const i=this.image_,n=i.getExtent(),r=i.getResolution(),[s,o]=Array.isArray(r)?r:[r,r],a=i.getPixelRatio(),l=t.layerStatesArray[t.layerIndex],h=t.pixelRatio,u=t.viewState,c=u.center,d=u.resolution,p=h*s/(d*a),g=h*o/(d*a),f=t.extent,m=u.resolution,y=u.rotation,_=Math.round(Ke(f)/m*h),x=Math.round(Ye(f)/m*h);Yi(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/h,1/h,y,-_/2,-x/2),Zi(this.inversePixelTransform,this.pixelTransform);const v=$i(this.pixelTransform);this.useContainer(e,v,this.getBackground(t));const w=this.getRenderContext(t),b=this.context.canvas;b.width!=_||b.height!=x?(b.width=_,b.height=x):this.containerReused||w.clearRect(0,0,_,x);let C=!1,S=!0;if(l.extent){const e=Ei(l.extent,u.projection);S=He(e,t.extent),C=S&&!Ee(e,t.extent),C&&this.clipUnrotated(w,t,e)}const E=i.getImage(),T=Yi(this.tempTransform,_/2,x/2,p,g,0,a*(n[0]-c[0])/s,a*(c[1]-n[3])/o);this.renderedResolution=o*h/a;const R=E.width*T[0],I=E.height*T[3];if(this.getLayer().getSource().getInterpolate()||(w.imageSmoothingEnabled=!1),this.preRender(w,t),S&&R>=.5&&I>=.5){const t=T[4],e=T[5],i=l.opacity;1!==i&&(w.save(),w.globalAlpha=i),w.drawImage(E,0,0,+E.width,+E.height,t,e,R,I),1!==i&&w.restore()}return this.postRender(this.context,t),C&&w.restore(),w.imageSmoothingEnabled=!0,v!==b.style.transform&&(b.style.transform=v),this.container}}var Xh=class extends qh{constructor(t){super(t)}createRenderer(){return new Wh(this)}getData(t){return super.getData(t)}},Bh={ +/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ +read:function(t,e,i,n,r){var s,o,a=8*r-n-1,l=(1<>1,u=-7,c=i?r-1:0,d=i?-1:1,p=t[e+c];for(c+=d,s=p&(1<<-u)-1,p>>=-u,u+=a;u>0;s=256*s+t[e+c],c+=d,u-=8);for(o=s&(1<<-u)-1,s>>=-u,u+=n;u>0;o=256*o+t[e+c],c+=d,u-=8);if(0===s)s=1-h;else{if(s===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),s-=h}return(p?-1:1)*o*Math.pow(2,s-n)},write:function(t,e,i,n,r,s){var o,a,l,h=8*s-r-1,u=(1<>1,d=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:s-1,g=n?1:-1,f=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+c>=1?d/l:d*Math.pow(2,1-c))*l>=2&&(o++,l/=2),o+c>=u?(a=0,o=u):o+c>=1?(a=(e*l-1)*Math.pow(2,r),o+=c):(a=e*Math.pow(2,c-1)*Math.pow(2,r),o=0));r>=8;t[i+p]=255&a,p+=g,a/=256,r-=8);for(o=o<0;t[i+p]=255&o,p+=g,o/=256,h-=8);t[i+p-g]|=128*f}},Vh=Zh,Yh=Bh;function Zh(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}Zh.Varint=0,Zh.Fixed64=1,Zh.Bytes=2,Zh.Fixed32=5;var Uh=4294967296,$h=1/Uh,Kh="undefined"==typeof TextDecoder?null:new TextDecoder("utf8");function Hh(t){return t.type===Zh.Bytes?t.readVarint()+t.pos:t.pos+1}function Jh(t,e,i){return i?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function Qh(t,e,i){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));i.realloc(n);for(var r=i.pos-1;r>=t;r--)i.buf[r+n]=i.buf[r]}function tu(t,e){for(var i=0;i>>8,t[i+2]=e>>>16,t[i+3]=e>>>24}function cu(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}Zh.prototype={destroy:function(){this.buf=null},readFields:function(t,e,i){for(i=i||this.length;this.pos>3,s=this.pos;this.type=7&n,t(r,e,this),this.pos===s&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=hu(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=cu(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=hu(this.buf,this.pos)+hu(this.buf,this.pos+4)*Uh;return this.pos+=8,t},readSFixed64:function(){var t=hu(this.buf,this.pos)+cu(this.buf,this.pos+4)*Uh;return this.pos+=8,t},readFloat:function(){var t=Yh.read(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Yh.read(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,i,n=this.buf;return e=127&(i=n[this.pos++]),i<128?e:(e|=(127&(i=n[this.pos++]))<<7,i<128?e:(e|=(127&(i=n[this.pos++]))<<14,i<128?e:(e|=(127&(i=n[this.pos++]))<<21,i<128?e:function(t,e,i){var n,r,s=i.buf;if(r=s[i.pos++],n=(112&r)>>4,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(127&r)<<3,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(127&r)<<10,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(127&r)<<17,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(127&r)<<24,r<128)return Jh(t,n,e);if(r=s[i.pos++],n|=(1&r)<<31,r<128)return Jh(t,n,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(i=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.pos;return this.pos=t,t-e>=12&&Kh?function(t,e,i){return Kh.decode(t.subarray(e,i))}(this.buf,e,t):function(t,e,i){var n="",r=e;for(;r239?4:l>223?3:l>191?2:1;if(r+u>i)break;1===u?l<128&&(h=l):2===u?128==(192&(s=t[r+1]))&&(h=(31&l)<<6|63&s)<=127&&(h=null):3===u?(s=t[r+1],o=t[r+2],128==(192&s)&&128==(192&o)&&((h=(15&l)<<12|(63&s)<<6|63&o)<=2047||h>=55296&&h<=57343)&&(h=null)):4===u&&(s=t[r+1],o=t[r+2],a=t[r+3],128==(192&s)&&128==(192&o)&&128==(192&a)&&((h=(15&l)<<18|(63&s)<<12|(63&o)<<6|63&a)<=65535||h>=1114112)&&(h=null)),null===h?(h=65533,u=1):h>65535&&(h-=65536,n+=String.fromCharCode(h>>>10&1023|55296),h=56320|1023&h),n+=String.fromCharCode(h),r+=u}return n}(this.buf,e,t)},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==Zh.Bytes)return t.push(this.readVarint(e));var i=Hh(this);for(t=t||[];this.pos127;);else if(e===Zh.Bytes)this.pos=this.readVarint()+this.pos;else if(e===Zh.Fixed32)this.pos+=4;else{if(e!==Zh.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e268435455||t<0?function(t,e){var i,n;t>=0?(i=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(i=~(-t%4294967296))?i=i+1|0:(i=0,n=n+1|0));if(t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,i){i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos++]=127&t|128,t>>>=7,i.buf[i.pos]=127&t}(i,0,e),function(t,e){var i=(7&t)<<4;if(e.buf[e.pos++]|=i|((t>>>=3)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;if(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),!t)return;e.buf[e.pos++]=127&t}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,i){for(var n,r,s=0;s55295&&n<57344){if(!r){n>56319||s+1===e.length?(t[i++]=239,t[i++]=191,t[i++]=189):r=n;continue}if(n<56320){t[i++]=239,t[i++]=191,t[i++]=189,r=n;continue}n=r-55296<<10|n-56320|65536,r=null}else r&&(t[i++]=239,t[i++]=191,t[i++]=189,r=null);n<128?t[i++]=n:(n<2048?t[i++]=n>>6|192:(n<65536?t[i++]=n>>12|224:(t[i++]=n>>18|240,t[i++]=n>>12&63|128),t[i++]=n>>6&63|128),t[i++]=63&n|128)}return i}(this.buf,t,this.pos);var i=this.pos-e;i>=128&&Qh(e,i,this),this.pos=e-1,this.writeVarint(i),this.pos+=i},writeFloat:function(t){this.realloc(4),Yh.write(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),Yh.write(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var i=0;i=128&&Qh(i,n,this),this.pos=i-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,i){this.writeTag(t,Zh.Bytes),this.writeRawMessage(e,i)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,tu,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,eu,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,ru,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,iu,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,nu,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,su,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,ou,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,au,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,lu,e)},writeBytesField:function(t,e){this.writeTag(t,Zh.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,Zh.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,Zh.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,Zh.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,Zh.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,Zh.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,Zh.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,Zh.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,Zh.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,Zh.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var du=br(Vh);class pu extends Fh{constructor(t){super(),t=t||{},this.dataProjection=new ie({code:"",units:"tile-pixels"}),this.featureClass_=t.featureClass?t.featureClass:qa,this.geometryName_=t.geometryName,this.layerName_=t.layerName?t.layerName:"layer",this.layers_=t.layers?t.layers:null,this.idProperty_=t.idProperty,this.supportedMediaTypes=["application/vnd.mapbox-vector-tile","application/x-protobuf"]}readRawGeometry_(t,e,i,n){t.pos=e.geometry;const r=t.readVarint()+t.pos;let s=1,o=0,a=0,l=0,h=0,u=0;for(;t.pos>3}if(o--,1===s||2===s)a+=t.readSVarint(),l+=t.readSVarint(),1===s&&h>u&&(n.push(h),u=h),i.push(a,l),h+=2;else{if(7!==s)throw new Error("Invalid command found in the PBF");h>u&&(i.push(i[u],i[u+1]),h+=2)}}h>u&&(n.push(h),u=h)}createFeature_(t,e,i){const n=e.type;if(0===n)return null;let r;const s=e.properties;let o;this.idProperty_?(o=s[this.idProperty_],delete s[this.idProperty_]):o=e.id,s[this.layerName_]=e.layer.name;const a=[],l=[];this.readRawGeometry_(t,e,a,l);const h=function(t,e){let i;1===t?i=1===e?"Point":"MultiPoint":2===t?i=1===e?"LineString":"MultiLineString":3===t&&(i="Polygon");return i}(n,l.length);if(this.featureClass_===qa)r=new this.featureClass_(h,a,l,2,s,o),r.transform(i.dataProjection);else{let t;if("Polygon"==h){const e=Gn(a,l);t=e.length>1?new Ga(a,"XY",e):new Nn(a,"XY",l)}else t="Point"===h?new Cn(a,"XY"):"LineString"===h?new Da(a,"XY"):"MultiPoint"===h?new za(a,"XY"):"MultiLineString"===h?new Oa(a,"XY",l):null;r=new(0,this.featureClass_),this.geometryName_&&r.setGeometryName(this.geometryName_);const e=Ph(t,!1,i);r.setGeometry(e),void 0!==o&&r.setId(o),r.setProperties(s,!0)}return r}getType(){return"arraybuffer"}readFeatures(t,e){const i=this.layers_,n=di((e=this.adaptOptions(e)).dataProjection);n.setWorldExtent(e.extent),e.dataProjection=n;const r=new du(t),s=r.readFields(gu,{}),o=[];for(const t in s){if(i&&!i.includes(t))continue;const a=s[t],l=a?[0,0,a.extent,a.extent]:null;n.setExtent(l);for(let t=0,i=a.length;t>3)?i.readString():2===t?i.readFloat():3===t?i.readDouble():4===t?i.readVarint64():5===t?i.readVarint():6===t?i.readSVarint():7===t?i.readBoolean():null;e.values.push(n)}}function mu(t,e,i){if(1==t)e.id=i.readVarint();else if(2==t){const t=i.readVarint()+i.pos;for(;i.pos=Ke(this.sourceProj_.getExtent()),this.sourceWorldWidth_=this.sourceProj_.getExtent()?Ke(this.sourceProj_.getExtent()):null,this.targetWorldWidth_=this.targetProj_.getExtent()?Ke(this.targetProj_.getExtent()):null;const l=Ue(i),h=$e(i),u=qe(i),c=Ne(i),d=this.transformInv_(l),p=this.transformInv_(h),g=this.transformInv_(u),f=this.transformInv_(c),m=10+(s?Math.max(0,Math.ceil(Math.log2(Ge(i)/(s*s*256*256)))):0);if(this.addQuad_(l,h,u,c,d,p,g,f,m),this.wrapsXInSource_){let t=1/0;this.triangles_.forEach((function(e,i,n){t=Math.min(t,e.source[0][0],e.source[1][0],e.source[2][0])})),this.triangles_.forEach((e=>{if(Math.max(e.source[0][0],e.source[1][0],e.source[2][0])-t>this.sourceWorldWidth_/2){const i=[[e.source[0][0],e.source[0][1]],[e.source[1][0],e.source[1][1]],[e.source[2][0],e.source[2][1]]];i[0][0]-t>this.sourceWorldWidth_/2&&(i[0][0]-=this.sourceWorldWidth_),i[1][0]-t>this.sourceWorldWidth_/2&&(i[1][0]-=this.sourceWorldWidth_),i[2][0]-t>this.sourceWorldWidth_/2&&(i[2][0]-=this.sourceWorldWidth_);const n=Math.min(i[0][0],i[1][0],i[2][0]);Math.max(i[0][0],i[1][0],i[2][0])-n.5&&u<1;let p=!1;if(l>0){if(this.targetProj_.isGlobal()&&this.targetWorldWidth_){p=Ke(ve([t,e,i,n]))/this.targetWorldWidth_>.25||p}!d&&this.sourceProj_.isGlobal()&&u&&(p=u>.25||p)}if(!p&&this.maxSourceExtent_&&isFinite(h[0])&&isFinite(h[1])&&isFinite(h[2])&&isFinite(h[3])&&!He(h,this.maxSourceExtent_))return;let g=0;if(!(p||isFinite(r[0])&&isFinite(r[1])&&isFinite(s[0])&&isFinite(s[1])&&isFinite(o[0])&&isFinite(o[1])&&isFinite(a[0])&&isFinite(a[1])))if(l>0)p=!0;else if(g=(isFinite(r[0])&&isFinite(r[1])?0:8)+(isFinite(s[0])&&isFinite(s[1])?0:4)+(isFinite(o[0])&&isFinite(o[1])?0:2)+(isFinite(a[0])&&isFinite(a[1])?0:1),1!=g&&2!=g&&4!=g&&8!=g)return;if(l>0){if(!p){const e=[(t[0]+i[0])/2,(t[1]+i[1])/2],n=this.transformInv_(e);let s;if(d){s=(Gt(r[0],c)+Gt(o[0],c))/2-Gt(n[0],c)}else s=(r[0]+o[0])/2-n[0];const a=(r[1]+o[1])/2-n[1];p=s*s+a*a>this.errorThresholdSquared_}if(p){if(Math.abs(t[0]-i[0])<=Math.abs(t[1]-i[1])){const h=[(e[0]+i[0])/2,(e[1]+i[1])/2],u=this.transformInv_(h),c=[(n[0]+t[0])/2,(n[1]+t[1])/2],d=this.transformInv_(c);this.addQuad_(t,e,h,c,r,s,u,d,l-1),this.addQuad_(c,h,i,n,d,u,o,a,l-1)}else{const h=[(t[0]+e[0])/2,(t[1]+e[1])/2],u=this.transformInv_(h),c=[(i[0]+n[0])/2,(i[1]+n[1])/2],d=this.transformInv_(c);this.addQuad_(t,h,c,n,r,u,d,a,l-1),this.addQuad_(h,e,i,c,u,s,o,d,l-1)}return}}if(d){if(!this.canWrapXInSource_)return;this.wrapsXInSource_=!0}0==(11&g)&&this.addTriangle_(t,i,n,r,o,a),0==(14&g)&&this.addTriangle_(t,i,e,r,o,s),g&&(0==(13&g)&&this.addTriangle_(e,n,t,s,a,r),0==(7&g)&&this.addTriangle_(e,n,i,s,a,o))}calculateSourceExtent(){const t=[1/0,1/0,-1/0,-1/0];return this.triangles_.forEach((function(e,i,n){const r=e.source;De(t,r[0]),De(t,r[1]),De(t,r[2])})),t}getTriangles(){return this.triangles_}}let xu;const vu=[];function wu(t,e,i,n,r){t.beginPath(),t.moveTo(0,0),t.lineTo(e,i),t.lineTo(n,r),t.closePath(),t.save(),t.clip(),t.fillRect(0,0,Math.max(e,n)+1,Math.max(i,r)),t.restore()}function bu(t,e){return Math.abs(t[4*e]-210)>2||Math.abs(t[4*e+3]-191.25)>2}function Cu(t,e,i,n){const r=vi(i,e,t);let s=pi(e,n,i);const o=e.getMetersPerUnit();void 0!==o&&(s*=o);const a=t.getMetersPerUnit();void 0!==a&&(s/=a);const l=t.getExtent();if(!l||Se(l,r)){const e=pi(t,s,r)/s;isFinite(e)&&e>0&&(s/=e)}return s}function Su(t,e,i,n,r,s,o,a,l,h,u,c,d,p){const g=U(Math.round(i*t),Math.round(i*e),vu);if(c||(g.imageSmoothingEnabled=!1),0===l.length)return g.canvas;function f(t){return Math.round(t*i)/i}g.scale(i,i),g.globalCompositeOperation="lighter";const m=[1/0,1/0,-1/0,-1/0];let y;l.forEach((function(t,e,i){Ae(m,t.extent)}));const _=i/n,x=(c?1:1+Math.pow(2,-24))/_;if(!d||1!==l.length||0!==h){if(y=U(Math.round(Ke(m)*_),Math.round(Ye(m)*_),vu),c||(y.imageSmoothingEnabled=!1),r&&p){const t=(r[0]-m[0])*_,e=-(r[3]-m[3])*_,i=Ke(r)*_,n=Ye(r)*_;y.rect(t,e,i,n),y.clip()}l.forEach((function(t,e,i){const n=(t.extent[0]-m[0])*_,r=-(t.extent[3]-m[3])*_,s=Ke(t.extent)*_,o=Ye(t.extent)*_;t.image.width>0&&t.image.height>0&&y.drawImage(t.image,h,h,t.image.width-2*h,t.image.height-2*h,c?n:Math.round(n),c?r:Math.round(r),c?s:Math.round(n+s)-Math.round(n),c?o:Math.round(r+o)-Math.round(r))}))}const v=Ue(o);return a.getTriangles().forEach((function(t,e,i){const n=t.source,r=t.target;let o=n[0][0],a=n[0][1],h=n[1][0],u=n[1][1],d=n[2][0],p=n[2][1];const _=f((r[0][0]-v[0])/s),w=f(-(r[0][1]-v[1])/s),b=f((r[1][0]-v[0])/s),C=f(-(r[1][1]-v[1])/s),S=f((r[2][0]-v[0])/s),E=f(-(r[2][1]-v[1])/s),T=o,R=a;o=0,a=0,h-=T,u-=R,d-=T,p-=R;const I=function(t){const e=t.length;for(let i=0;ir&&(r=e,n=s)}if(0===r)return null;const s=t[n];t[n]=t[i],t[i]=s;for(let n=i+1;n=0;n--){i[n]=t[n][e]/t[n][n];for(let r=n-1;r>=0;r--)t[r][e]-=t[r][n]*i[n]}return i}([[h,u,0,0,b-_],[d,p,0,0,S-_],[0,0,h,u,C-w],[0,0,d,p,E-w]]);if(!I)return;if(g.save(),g.beginPath(),function(){if(void 0===xu){const t=U(6,6,vu);t.globalCompositeOperation="lighter",t.fillStyle="rgba(210, 0, 0, 0.75)",wu(t,4,5,4,0),wu(t,4,5,0,5);const e=t.getImageData(0,0,3,3).data;xu=bu(e,0)||bu(e,4)||bu(e,8),H(t),vu.push(t.canvas)}return xu}()||!c){g.moveTo(b,C);const t=4,e=_-b,i=w-C;for(let n=0;nthis.getImageInternal(t,e,i,r)),this.getInterpolate()),this.reprojectedRevision_=this.getRevision(),this.reprojectedImage_}getImageInternal(t,e,i,n){if(this.loader){const r=function(t,e,i,n){const r=e/i,s=We(t),o=Xt(Ke(t)/r,4),a=Xt(Ye(t)/r,4),l=Xt((n-1)*o/2,4),h=o+2*l,u=Xt((n-1)*a/2,4);return Be(s,r,0,[h,a+2*u])}(t,e,i,1),s=this.findNearestResolution(e);if(this.image&&(this.static_||this.wantedProjection_===n&&(this.wantedExtent_&&Ee(this.wantedExtent_,r)||Ee(this.image.getExtent(),r))&&(this.wantedResolution_&&Eu(this.wantedResolution_)===s||Eu(this.image.getResolution())===s)))return this.image;this.wantedProjection_=n,this.wantedExtent_=r,this.wantedResolution_=s,this.image=new Or(r,s,i,this.loader),this.image.addEventListener(m,this.handleImageChange.bind(this))}return this.image}handleImageChange(t){const e=t.target;let i;switch(e.getState()){case dr.LOADING:this.loading=!0,i=Ru;break;case dr.LOADED:this.loading=!1,i=Iu;break;case dr.ERROR:this.loading=!1,i=Mu;break;default:return}this.hasListener(i)&&this.dispatchEvent(new ku(i,e))}}var Pu="preload",Lu="useInterimTilesOnError";class Au extends Zn{constructor(t){t=t||{};const e=Object.assign({},t);delete e.preload,delete e.useInterimTilesOnError,super(e),this.on,this.once,this.un,this.setPreload(void 0!==t.preload?t.preload:0),this.setUseInterimTilesOnError(void 0===t.useInterimTilesOnError||t.useInterimTilesOnError)}getPreload(){return this.get(Pu)}setPreload(t){this.set(Pu,t)}getUseInterimTilesOnError(){return this.get(Lu)}setUseInterimTilesOnError(t){this.set(Lu,t)}getData(t){return super.getData(t)}}class Du extends wh{constructor(t,e,i,n,r,s,o,a,l,h,u,c){super(r,jo.IDLE,c),this.renderEdges_=void 0!==u&&u,this.pixelRatio_=o,this.gutter_=a,this.canvas_=null,this.sourceTileGrid_=e,this.targetTileGrid_=n,this.wrappedTileCoord_=s||r,this.sourceTiles_=[],this.sourcesListenerKeys_=null,this.sourceZ_=0;const d=n.getTileCoordExtent(this.wrappedTileCoord_),p=this.targetTileGrid_.getExtent();let g=this.sourceTileGrid_.getExtent();const f=p?Ze(d,p):d;if(0===Ge(f))return void(this.state=jo.EMPTY);const m=t.getExtent();m&&(g=g?Ze(g,m):m);const y=n.getResolution(this.wrappedTileCoord_[0]),_=function(t,e,i,n){const r=We(i);let s=Cu(t,e,r,n);return(!isFinite(s)||s<=0)&&je(i,(function(i){return s=Cu(t,e,i,n),isFinite(s)&&s>0})),s}(t,i,f,y);if(!isFinite(_)||_<=0)return void(this.state=jo.EMPTY);const x=void 0!==h?h:.5;if(this.triangulation_=new _u(t,i,f,g,_*x,y),0===this.triangulation_.getTriangles().length)return void(this.state=jo.EMPTY);this.sourceZ_=e.getZForResolution(_);let v=this.triangulation_.calculateSourceExtent();if(g&&(t.canWrapX()?(v[1]=Dt(v[1],g[1],g[3]),v[3]=Dt(v[3],g[1],g[3])):v=Ze(v,g)),Ge(v)){const t=e.getTileRangeForExtentAndZ(v,this.sourceZ_);for(let e=t.minX;e<=t.maxX;e++)for(let i=t.minY;i<=t.maxY;i++){const t=l(this.sourceZ_,e,i,o);t&&this.sourceTiles_.push(t)}0===this.sourceTiles_.length&&(this.state=jo.EMPTY)}else this.state=jo.EMPTY}getImage(){return this.canvas_}reproject_(){const t=[];if(this.sourceTiles_.forEach((e=>{e&&e.getState()==jo.LOADED&&t.push({extent:this.sourceTileGrid_.getTileCoordExtent(e.tileCoord),image:e.getImage()})})),this.sourceTiles_.length=0,0===t.length)this.state=jo.ERROR;else{const e=this.wrappedTileCoord_[0],i=this.targetTileGrid_.getTileSize(e),n="number"==typeof i?i:i[0],r="number"==typeof i?i:i[1],s=this.targetTileGrid_.getResolution(e),o=this.sourceTileGrid_.getResolution(this.sourceZ_),a=this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);this.canvas_=Su(n,r,this.pixelRatio_,o,this.sourceTileGrid_.getExtent(),s,a,this.triangulation_,t,this.gutter_,this.renderEdges_,this.interpolate),this.state=jo.LOADED}this.changed()}load(){if(this.state==jo.IDLE){this.state=jo.LOADING,this.changed();let t=0;this.sourcesListenerKeys_=[],this.sourceTiles_.forEach((e=>{const i=e.getState();if(i==jo.IDLE||i==jo.LOADING){t++;const i=T(e,m,(function(n){const r=e.getState();r!=jo.LOADED&&r!=jo.ERROR&&r!=jo.EMPTY||(I(i),t--,0===t&&(this.unlistenSources_(),this.reproject_()))}),this);this.sourcesListenerKeys_.push(i)}})),0===t?setTimeout(this.reproject_.bind(this),0):this.sourceTiles_.forEach((function(t,e,i){t.getState()==jo.IDLE&&t.load()}))}}unlistenSources_(){this.sourcesListenerKeys_.forEach(I),this.sourcesListenerKeys_=null}release(){this.canvas_&&(H(this.canvas_.getContext("2d")),vu.push(this.canvas_),this.canvas_=null),super.release()}}class Ou extends Rl{constructor(t){super(t),this.extentChanged=!0,this.renderedExtent_=null,this.renderedPixelRatio,this.renderedProjection=null,this.renderedRevision,this.renderedTiles=[],this.newTiles_=!1,this.tmpExtent=[1/0,1/0,-1/0,-1/0],this.tmpTileRange_=new Wa(0,0,0,0)}isDrawableTile(t){const e=this.getLayer(),i=t.getState(),n=e.getUseInterimTilesOnError();return i==jo.LOADED||i==jo.EMPTY||i==jo.ERROR&&!n}getTile(t,e,i,n){const r=n.pixelRatio,s=n.viewState.projection,o=this.getLayer();let a=o.getSource().getTile(t,e,i,r,s);return a.getState()==jo.ERROR&&o.getUseInterimTilesOnError()&&o.getPreload()>0&&(this.newTiles_=!0),this.isDrawableTile(a)||(a=a.getInterimTile()),a}getData(t){const e=this.frameState;if(!e)return null;const i=this.getLayer(),n=Bi(e.pixelToCoordinateTransform,t.slice()),r=i.getExtent();if(r&&!Se(r,n))return null;const s=e.pixelRatio,o=e.viewState.projection,a=e.viewState,l=i.getRenderSource(),h=l.getTileGridForProjection(a.projection),u=l.getTilePixelRatio(e.pixelRatio);for(let t=h.getZForResolution(a.resolution);t>=h.getMinZoom();--t){const e=h.getTileCoordForCoordAndZ(n,t),i=l.getTile(t,e[1],e[2],s,o);if(!(i instanceof bh||i instanceof Du)||i instanceof Du&&i.getState()===jo.EMPTY)return null;if(i.getState()!==jo.LOADED)continue;const r=h.getOrigin(t),c=gr(h.getTileSize(t)),d=h.getResolution(t),p=Math.floor(u*((n[0]-r[0])/d-e[1]*c[0])),g=Math.floor(u*((r[1]-n[1])/d-e[2]*c[1])),f=Math.round(u*l.getGutterForProjection(a.projection));return this.getImageData(i.getImage(),p+f,g+f)}return null}loadedTileCallback(t,e,i){return!!this.isDrawableTile(i)&&super.loadedTileCallback(t,e,i)}prepareFrame(t){return!!this.getLayer().getSource()}renderFrame(t,e){const i=t.layerStatesArray[t.layerIndex],r=t.viewState,s=r.projection,o=r.resolution,a=r.center,l=r.rotation,h=t.pixelRatio,u=this.getLayer(),c=u.getSource(),d=c.getRevision(),p=c.getTileGridForProjection(s),g=p.getZForResolution(o,c.zDirection),f=p.getResolution(g);let m=t.extent;const y=t.viewState.resolution,_=c.getTilePixelRatio(h),x=Math.round(Ke(m)/y*h),v=Math.round(Ye(m)/y*h),w=i.extent&&Ei(i.extent);w&&(m=Ze(m,Ei(i.extent)));const b=f*x/2/_,C=f*v/2/_,S=[a[0]-b,a[1]-C,a[0]+b,a[1]+C],E=p.getTileRangeForExtentAndZ(m,g),T={};T[g]={};const R=this.createLoadedTileFinder(c,s,T),I=this.tmpExtent,M=this.tmpTileRange_;this.newTiles_=!1;const k=l?Ve(r.center,y,l,t.size):void 0;for(let e=E.minX;e<=E.maxX;++e)for(let n=E.minY;n<=E.maxY;++n){if(l&&!p.tileCoordIntersectsViewport([g,e,n],k))continue;const r=this.getTile(g,e,n,t);if(this.isDrawableTile(r)){const e=P(this);if(r.getState()==jo.LOADED){T[g][r.tileCoord.toString()]=r;let t=r.inTransition(e);t&&1!==i.opacity&&(r.endTransition(e),t=!1),this.newTiles_||!t&&this.renderedTiles.includes(r)||(this.newTiles_=!0)}if(1===r.getAlpha(e,t.time))continue}const s=p.getTileCoordChildTileRange(r.tileCoord,M,I);let o=!1;s&&(o=R(g+1,s)),o||p.forEachTileCoordParentTileRange(r.tileCoord,R,M,I)}const F=f/o*h/_;Yi(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/h,1/h,l,-x/2,-v/2);const L=$i(this.pixelTransform);this.useContainer(e,L,this.getBackground(t));const A=this.getRenderContext(t),D=this.context.canvas;Zi(this.inversePixelTransform,this.pixelTransform),Yi(this.tempTransform,x/2,v/2,F,F,0,-x/2,-v/2),D.width!=x||D.height!=v?(D.width=x,D.height=v):this.containerReused||A.clearRect(0,0,x,v),w&&this.clipUnrotated(A,t,w),c.getInterpolate()||(A.imageSmoothingEnabled=!1),this.preRender(A,t),this.renderedTiles.length=0;let O,z,j,G=Object.keys(T).map(Number);G.sort(n),1!==i.opacity||this.containerReused&&!c.getOpaque(t.viewState.projection)?(O=[],z=[]):G=G.reverse();for(let e=G.length-1;e>=0;--e){const i=G[e],n=c.getTilePixelSize(i,h,s),r=p.getResolution(i)/f,o=n[0]*r*F,a=n[1]*r*F,l=p.getTileCoordForCoordAndZ(Ue(S),i),u=p.getTileCoordExtent(l),d=Bi(this.tempTransform,[_*(u[0]-S[0])/f,_*(S[3]-u[3])/f]),m=_*c.getGutterForProjection(s),y=T[i];for(const e in y){const n=y[e],r=n.tileCoord,s=l[1]-r[1],h=Math.round(d[0]-(s-1)*o),u=l[2]-r[2],p=Math.round(d[1]-(u-1)*a),f=Math.round(d[0]-s*o),_=Math.round(d[1]-u*a),x=h-f,v=p-_,w=g===i,b=w&&1!==n.getAlpha(P(this),t.time);let C=!1;if(!b)if(O){j=[f,_,f+x,_,f+x,_+v,f,_+v];for(let t=0,e=O.length;t0?n:Math.max(s/i[0],r/i[1]);const o=e+1,a=new Array(o);for(let t=0;ti||i>e.getMaxZoom())return!1;const s=e.getFullTileRange(i);return!s||s.containsXY(n,r)}(t,i)?t:null}clear(){this.tileCache.clear()}refresh(){this.clear(),super.refresh()}updateCacheSize(t,e){const i=this.getTileCacheForProjection(e);t>i.highWaterMark&&(i.highWaterMark=t)}useTile(t,e,i,n){}};let Bu,Vu=!0;try{new ImageData(10,10)}catch(t){Vu=!1}function Yu(t){let e=!0;try{new ImageData(10,10)}catch(t){e=!1}function i(t,i,n){return e?new ImageData(t,i,n):{data:t,width:i,height:n}}return function(e){const n=e.buffers,r=e.meta,s=e.imageOps,o=e.width,a=e.height,l=n.length,h=n[0].byteLength;if(s){const e=new Array(l);for(let t=0;tthis._maxQueueLength;)this._queue.shift().callback(null,null)}_dispatch(){if(this._running||0===this._queue.length)return;const t=this._queue.shift();this._job=t;const e=t.inputs[0].width,i=t.inputs[0].height,n=t.inputs.map((function(t){return t.data.buffer})),r=this._workers.length;if(this._running=r,1===r)return void this._workers[0].postMessage({buffers:n,meta:t.meta,imageOps:this._imageOps,width:e,height:i},n);const s=t.inputs[0].data.length,o=4*Math.ceil(s/4/r);for(let s=0;sthis.getTileInternal(t,e,i,n,s)),this.reprojectionErrorThreshold_,this.renderReprojectionEdges_,this.tileOptions);return g.key=u,l?(g.interimTile=l,g.refreshInterimChain(),o.replace(h,g)):o.set(h,g),g}getTileInternal(t,e,i,n,r){let s=null;const o=Va(t,e,i),a=this.getKey();if(this.tileCache.containsKey(o)){if(s=this.tileCache.get(o),s.key!=a){const l=s;s=this.createTile_(t,e,i,n,r,a),l.getState()==jo.IDLE?s.interimTile=l.interimTile:s.interimTile=l,s.refreshInterimChain(),this.tileCache.replace(o,s)}}else s=this.createTile_(t,e,i,n,r,a),this.tileCache.set(o,s);return s}setRenderReprojectionEdges(t){if(this.renderReprojectionEdges_!=t){this.renderReprojectionEdges_=t;for(const t in this.tileCacheForProjection)this.tileCacheForProjection[t].clear();this.changed()}}setTileGridForProjection(t,e){const i=di(t);if(i){const t=P(i);t in this.tileGridForProjection||(this.tileGridForProjection[t]=e)}}clear(){super.clear();for(const t in this.tileCacheForProjection)this.tileCacheForProjection[t].clear()}}function ac(t,e){t.getImage().src=e}var lc=class extends oc{constructor(t){if(super({attributions:t.attributions,cacheSize:t.cacheSize,crossOrigin:t.crossOrigin,interpolate:t.interpolate,projection:di("EPSG:3857"),reprojectionErrorThreshold:t.reprojectionErrorThreshold,state:"loading",tileLoadFunction:t.tileLoadFunction,wrapX:void 0===t.wrapX||t.wrapX,transition:t.transition,zDirection:t.zDirection}),this.tileJSON_=null,this.tileSize_=t.tileSize,t.url)if(t.jsonp)!function(t,e,i,n){const r=document.createElement("script"),s="olc_"+P(e);function o(){delete window[s],r.parentNode.removeChild(r)}r.async=!0,r.src=t+(t.includes("?")?"&":"?")+(n||"callback")+"="+s;const a=setTimeout((function(){o(),i&&i()}),1e4);window[s]=function(t){clearTimeout(a),o(),e(t)},document.head.appendChild(r)}(t.url,this.handleTileJSONResponse.bind(this),this.handleTileJSONError.bind(this));else{const e=new XMLHttpRequest;e.addEventListener("load",this.onXHRLoad_.bind(this)),e.addEventListener("error",this.onXHRError_.bind(this)),e.open("GET",t.url),e.send()}else{if(!t.tileJSON)throw new Error("Either `url` or `tileJSON` options must be provided");this.handleTileJSONResponse(t.tileJSON)}}onXHRLoad_(t){const e=t.target;if(!e.status||e.status>=200&&e.status<300){let t;try{t=JSON.parse(e.responseText)}catch(t){return void this.handleTileJSONError()}this.handleTileJSONResponse(t)}else this.handleTileJSONError()}onXHRError_(t){this.handleTileJSONError()}getTileJSON(){return this.tileJSON_}handleTileJSONResponse(t){const e=di("EPSG:4326"),i=this.getProjection();let n;if(void 0!==t.bounds){const r=_i(e,i);n=Qe(t.bounds,r)}const r=qu(i),s=t.minzoom||0,o=Gu({extent:r,maxZoom:t.maxzoom||22,minZoom:s,tileSize:this.tileSize_});if(this.tileGrid=o,this.tileUrlFunction=Mh(t.tiles,o),t.attribution&&!this.getAttributions()){const e=void 0!==n?n:r;this.setAttributions((function(i){return He(e,i.extent)?[t.attribution]:null}))}this.tileJSON_=t,this.setState("ready")}handleTileJSONError(){this.setState("error")}};const hc={image:["Polygon","Circle","LineString","Image","Text"],hybrid:["Polygon","LineString"],vector:[]},uc={hybrid:["Image","Text","Default"],vector:["Polygon","Circle","LineString","Image","Text","Default"]};class cc extends Ou{constructor(t){super(t),this.boundHandleStyleImageChange_=this.handleStyleImageChange_.bind(this),this.renderedLayerRevision_,this.renderedPixelToCoordinateTransform_=null,this.renderedRotation_,this.renderedOpacity_=1,this.tmpTransform_=[1,0,0,1,0,0],this.tileClipContexts_=null}prepareTile(t,e,i){let n;const r=t.getState();return r!==jo.LOADED&&r!==jo.ERROR||(this.updateExecutorGroup_(t,e,i),this.tileImageNeedsRender_(t)&&(n=!0)),n}getTile(t,e,i,n){const r=n.pixelRatio,s=n.viewState,o=s.resolution,a=s.projection,l=this.getLayer(),h=l.getSource().getTile(t,e,i,r,a),u=n.viewHints,c=!(u[Kt]||u[Ht]);!c&&h.wantedResolution||(h.wantedResolution=o);return this.prepareTile(h,r,a)&&(c||Date.now()-n.time<8)&&"vector"!==l.getRenderMode()&&this.renderTileImage_(h,n),super.getTile(t,e,i,n)}isDrawableTile(t){const e=this.getLayer();return super.isDrawableTile(t)&&("vector"===e.getRenderMode()?P(e)in t.executorGroups:t.hasContext(e))}getTileImage(t){return t.getImage(this.getLayer())}prepareFrame(t){const e=this.getLayer().getRevision();return this.renderedLayerRevision_!==e&&(this.renderedLayerRevision_=e,this.renderedTiles.length=0),super.prepareFrame(t)}updateExecutorGroup_(t,e,i){const n=this.getLayer(),r=n.getRevision(),s=n.getRenderOrder()||null,o=t.wantedResolution,a=t.getReplayState(n);if(!a.dirty&&a.renderedResolution===o&&a.renderedRevision==r&&a.renderedRenderOrder==s)return;const l=n.getSource(),h=!!n.getDeclutter(),u=l.getTileGrid(),c=l.getTileGridForProjection(i).getTileCoordExtent(t.wrappedTileCoord),d=l.getSourceTiles(e,i,t),p=P(n);delete t.hitDetectionImageData[p],t.executorGroups[p]=[],a.dirty=!1;for(let i=0,r=d.length;i{const r=f?e.declutter[f].all().map((t=>t.value)):null;for(let e=0,a=n.length;e{const n=this.getLayer(),r=P(n),s=n.getSource(),o=this.renderedProjection,a=o.getExtent(),l=this.renderedResolution,h=s.getTileGridForProjection(o),u=Bi(this.renderedPixelToCoordinateTransform_,t.slice()),c=h.getTileCoordForCoordAndResolution(u,l);let d;for(let t=0,e=this.renderedTiles.length;t0)return void e([]);const p=Ue(h.getTileCoordExtent(d.wrappedTileCoord)),g=[(u[0]-p[0])/l,(p[1]-u[1])/l],f=d.getSourceTiles().reduce((function(t,e){return t.concat(e.getFeatures())}),[]);let m=d.hitDetectionImageData[r];if(!m){const t=gr(h.getTileSize(h.getZForResolution(l,s.zDirection))),e=this.renderedRotation_;m=Yl(t,[this.getRenderTransform(h.getTileCoordCenter(d.wrappedTileCoord),l,0,Vl,t[0]*Vl,t[1]*Vl,0)],f,n.getStyleFunction(),h.getTileCoordExtent(d.wrappedTileCoord),d.getReplayState(n).renderedResolution,e),d.hitDetectionImageData[r]=m}e(Zl(g,f,m))}))}handleFontsChanged(){const t=this.getLayer();t.getVisible()&&void 0!==this.renderedLayerRevision_&&t.changed()}handleStyleImageChange_(t){this.renderIfReadyAndVisible()}renderDeclutter(t,e){const i=this.context,n=i.globalAlpha;i.globalAlpha=e.opacity;const r=t.viewHints,s=!(r[Kt]||r[Ht]),o=this.renderedTiles;for(let e=0,i=o.length;e=0;--e)n[e].execute(this.context,[this.context.canvas.width,this.context.canvas.height],this.getTileRenderTransform(i,t),t.viewState.rotation,s,Nl,r?t.declutter[r]:void 0)}i.globalAlpha=n}renderDeferredInternal(t){const e=this.renderedTiles.reduce(((t,e,i)=>(e.executorGroups[P(this.getLayer())].forEach((e=>t.push({executorGroup:e,index:i}))),t)),[]),i=e.map((({executorGroup:t})=>t.getDeferredZIndexContexts()));i.map((t=>Object.keys(t))).flat().sort(n).map(Number).forEach((t=>{i.forEach(((i,n)=>{i[t]&&i[t].forEach((t=>{const{executorGroup:i,index:r}=e[n],s=i.getRenderedContext(),o=s.globalAlpha;s.globalAlpha=this.renderedOpacity_;const a=this.tileClipContexts_[r];a&&a.draw(s),t.draw(s),a&&s.restore(),s.globalAlpha=o,t.clear()}))}))}))}getTileRenderTransform(t,e){const i=e.pixelRatio,n=e.viewState,r=n.center,s=n.resolution,o=n.rotation,a=e.size,l=Math.round(a[0]*i),h=Math.round(a[1]*i),u=this.getLayer().getSource().getTileGridForProjection(e.viewState.projection),c=t.tileCoord,d=u.getTileCoordExtent(t.wrappedTileCoord),p=u.getTileCoordExtent(c,this.tmpExtent)[0]-d[0];return Wi(Vi(this.inversePixelTransform.slice(),1/i,1/i),this.getRenderTransform(r,s,o,i,l,h,p))}postRender(t,e){const i=e.viewHints,n=!(i[Kt]||i[Ht]);this.renderedPixelToCoordinateTransform_=e.pixelToCoordinateTransform.slice(),this.renderedRotation_=e.viewState.rotation,this.renderedOpacity_=e.layerStatesArray[e.layerIndex].opacity;const r=this.getLayer(),s=r.getRenderMode(),o=t.globalAlpha;t.globalAlpha=this.renderedOpacity_;const a=r.getDeclutter(),l=a?uc[s].filter((t=>!Nl.includes(t))):uc[s],h=e.viewState,u=h.rotation,c=r.getSource(),d=c.getTileGridForProjection(h.projection).getZForResolution(h.resolution,c.zDirection),p=this.renderedTiles,g=[],f=[],m=[];let y=!0;for(let i=p.length-1;i>=0;--i){const s=p[i];y=y&&!s.getReplayState(r).dirty;const o=s.executorGroups[P(r)].filter((t=>t.hasExecutors(l)));if(0===o.length)continue;const h=this.getTileRenderTransform(s,e),c=s.tileCoord[0];let _=!1;const x=o[0].getClipCoords(h);let v,w=t;if(x){a&&(v=new Sl,w=v.getContext());for(let t=0,e=g.length;t{const n=function(t){const[e,i,n]=t.substring(t.lastIndexOf("/")+1,t.length).split(",").map(Number);return Va(e,i,n)}(e),r=i.peek(n);if(r){const e=r.sourceTiles;for(let i=0,n=e.length;i{const r=this.tileUrlFunction(n,t,e),s=this.sourceTileCache.containsKey(r)?this.sourceTileCache.get(r):new this.tileClass(n,r?jo.IDLE:jo.EMPTY,r,this.format_,this.tileLoadFunction);i.sourceTiles.push(s);const o=s.getState();if(o{this.handleTileChange(e);const n=s.getState();if(n===jo.LOADED||n===jo.ERROR){const e=s.getKey();e in i.errorTileKeys?s.getState()===jo.LOADED&&delete i.errorTileKeys[e]:i.loadingSourceTiles--,n===jo.ERROR?i.errorTileKeys[e]=!0:s.removeEventListener(m,t),0===i.loadingSourceTiles&&i.setState(g(i.errorTileKeys)?jo.LOADED:jo.ERROR)}};s.addEventListener(m,t),i.loadingSourceTiles++}o===jo.IDLE&&(s.extent=l.getTileCoordExtent(n),s.projection=e,s.resolution=l.getResolution(n[0]),this.sourceTileCache.set(r,s),s.load())})),i.loadingSourceTiles||i.setState(i.sourceTiles.some((t=>t.getState()===jo.ERROR))?jo.ERROR:jo.LOADED)}return i.sourceTiles}getTile(t,e,i,n,r){const s=Va(t,e,i),o=this.getKey();let a;if(this.tileCache.containsKey(s)&&(a=this.tileCache.get(s),a.key===o))return a;const l=[t,e,i];let h=this.getTileCoordForTileUrlFunction(l,r);const u=this.getTileGrid().getExtent(),c=this.getTileGridForProjection(r);if(h&&u){const e=c.getTileCoordExtent(h);we(e,-c.getResolution(t),e),He(u,e)||(h=null)}let d=!0;if(null!==h){const e=this.tileGrid,i=c.getResolution(t),s=e.getZForResolution(i,1),o=c.getTileCoordExtent(h);we(o,-i,o),e.forEachTileCoord(o,s,(t=>{d=d&&!this.tileUrlFunction(t,n,r)}))}const p=new Th(l,d?jo.EMPTY:jo.IDLE,h,this.getSourceTiles.bind(this,n,r));return p.key=o,a?(p.interimTile=a,p.refreshInterimChain(),this.tileCache.replace(s,p)):this.tileCache.set(s,p),p}getTileGridForProjection(t){const e=t.getCode();let i=this.tileGrids_[e];if(!i){const t=this.tileGrid,n=t.getResolutions().slice(),r=n.map((function(e,i){return t.getOrigin(i)})),s=n.map((function(e,i){return t.getTileSize(i)})),o=Qt+1;for(let t=n.length;t255?255:t}function xc(t){return t<0?0:t>1?1:t}function vc(t){return"%"===t[t.length-1]?_c(parseFloat(t)/100*255):_c(parseInt(t))}function wc(t){return"%"===t[t.length-1]?xc(parseFloat(t)/100):xc(parseFloat(t))}function bc(t,e,i){return i<0?i+=1:i>1&&(i-=1),6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}try{mc={}.parseCSSColor=function(t){var e,i=t.replace(/ /g,"").toLowerCase();if(i in yc)return yc[i].slice();if("#"===i[0])return 4===i.length?(e=parseInt(i.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===i.length&&(e=parseInt(i.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var n=i.indexOf("("),r=i.indexOf(")");if(-1!==n&&r+1===i.length){var s=i.substr(0,n),o=i.substr(n+1,r-(n+1)).split(","),a=1;switch(s){case"rgba":if(4!==o.length)return null;a=wc(o.pop());case"rgb":return 3!==o.length?null:[vc(o[0]),vc(o[1]),vc(o[2]),a];case"hsla":if(4!==o.length)return null;a=wc(o.pop());case"hsl":if(3!==o.length)return null;var l=(parseFloat(o[0])%360+360)%360/360,h=wc(o[1]),u=wc(o[2]),c=u<=.5?u*(h+1):u+h-u*h,d=2*u-c;return[_c(255*bc(d,c,l+1/3)),_c(255*bc(d,c,l)),_c(255*bc(d,c,l-1/3)),a];default:return null}}return null}}catch(t){}class Cc{constructor(t,e,i,n=1){this.r=t,this.g=e,this.b=i,this.a=n}static parse(t){if(!t)return;if(t instanceof Cc)return t;if("string"!=typeof t)return;const e=mc(t);return e?new Cc(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3]):void 0}toString(){const[t,e,i,n]=this.toArray();return`rgba(${Math.round(t)},${Math.round(e)},${Math.round(i)},${n})`}toArray(){const{r:t,g:e,b:i,a:n}=this;return 0===n?[0,0,0,0]:[255*t/n,255*e/n,255*i/n,n]}toArray01(){const{r:t,g:e,b:i,a:n}=this;return 0===n?[0,0,0,0]:[t/n,e/n,i/n,n]}toArray01PremultipliedAlpha(){const{r:t,g:e,b:i,a:n}=this;return[t,e,i,n]}}Cc.black=new Cc(0,0,0,1),Cc.white=new Cc(1,1,1,1),Cc.transparent=new Cc(0,0,0,0),Cc.red=new Cc(1,0,0,1),Cc.blue=new Cc(0,0,1,1);var Sc=Cc;function Ec(t){return"object"==typeof t?["literal",t]:t}function Tc(t,e){let i=t.stops;if(!i)return function(t,e){const i=["get",t.property];if(void 0===t.default)return"string"===e.type?["string",i]:i;if("enum"===e.type)return["match",i,Object.keys(e.values),i,t.default];{const n=["color"===e.type?"to-color":e.type,i,Ec(t.default)];return"array"===e.type&&n.splice(1,0,e.value,e.length||null),n}}(t,e);const n=i&&"object"==typeof i[0][0],r=n||void 0!==t.property,s=n||!r;return i=i.map((t=>!r&&e.tokens&&"string"==typeof t[1]?[t[0],Lc(t[1])]:[t[0],Ec(t[1])])),n?function(t,e,i){const n={},r={},s=[];for(let e=0;e3&&e===t[t.length-2]||(n&&2===t.length||t.push(e),t.push(i))}function Pc(t,e){return t.type?t.type:e.expression.interpolated?"exponential":"interval"}function Lc(t){const e=["concat"],i=/{([^{}]+)}/g;let n=0;for(let r=i.exec(t);null!==r;r=i.exec(t)){const s=t.slice(n,i.lastIndex-r[0].length);n=i.lastIndex,s.length>0&&e.push(s),e.push(["get",r[1]])}if(1===e.length)return t;if(n`:"value"===t.itemType.kind?"array":`array<${e}>`}return t.kind}const Kc=[jc,Gc,Nc,qc,Wc,Yc,Xc,Uc(Bc),Zc];function Hc(t,e){if("error"===e.kind)return null;if("array"===t.kind){if("array"===e.kind&&(0===e.N&&"value"===e.itemType.kind||!Hc(t.itemType,e.itemType))&&("number"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if("value"===t.kind)for(const t of Kc)if(!Hc(t,e))return null}return`Expected ${$c(t)} but found ${$c(e)} instead.`}function Jc(t,e){return e.some((e=>e.kind===t.kind))}function Qc(t,e){return e.some((e=>"null"===e?null===t:"array"===e?Array.isArray(t):"object"===e?t&&!Array.isArray(t)&&"object"==typeof t:e===typeof t))}class td{constructor(t,e,i){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=i,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})}compare(t,e){return this.collator.compare(t,e)}resolvedLocale(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale}}class ed{constructor(t,e,i,n,r){this.text=t.normalize?t.normalize():t,this.image=e,this.scale=i,this.fontStack=n,this.textColor=r}}class id{constructor(t){this.sections=t}static fromString(t){return new id([new ed(t,null,null,null,null)])}isEmpty(){return 0===this.sections.length||!this.sections.some((t=>0!==t.text.length||t.image&&0!==t.image.name.length))}static factory(t){return t instanceof id?t:id.fromString(t)}toString(){return 0===this.sections.length?"":this.sections.map((t=>t.text)).join("")}serialize(){const t=["format"];for(const e of this.sections){if(e.image){t.push(["image",e.image.name]);continue}t.push(e.text);const i={};e.fontStack&&(i["text-font"]=["literal",e.fontStack.split(",")]),e.scale&&(i["font-scale"]=e.scale),e.textColor&&(i["text-color"]=["rgba"].concat(e.textColor.toArray())),t.push(i)}return t}}class nd{constructor(t){this.name=t.name,this.available=t.available}toString(){return this.name}static fromString(t){return t?new nd({name:t,available:!1}):null}serialize(){return["image",this.name]}}function rd(t,e,i,n){if(!("number"==typeof t&&t>=0&&t<=255&&"number"==typeof e&&e>=0&&e<=255&&"number"==typeof i&&i>=0&&i<=255)){return`Invalid rgba value [${("number"==typeof n?[t,e,i,n]:[t,e,i]).join(", ")}]: 'r', 'g', and 'b' must be between 0 and 255.`}return void 0===n||"number"==typeof n&&n>=0&&n<=1?null:`Invalid rgba value [${[t,e,i,n].join(", ")}]: 'a' must be between 0 and 1.`}function sd(t){if(null===t)return!0;if("string"==typeof t)return!0;if("boolean"==typeof t)return!0;if("number"==typeof t)return!0;if(t instanceof Sc)return!0;if(t instanceof td)return!0;if(t instanceof id)return!0;if(t instanceof nd)return!0;if(Array.isArray(t)){for(const e of t)if(!sd(e))return!1;return!0}if("object"==typeof t){for(const e in t)if(!sd(t[e]))return!1;return!0}return!1}function od(t){if(null===t)return jc;if("string"==typeof t)return Nc;if("boolean"==typeof t)return qc;if("number"==typeof t)return Gc;if(t instanceof Sc)return Wc;if(t instanceof td)return Vc;if(t instanceof id)return Yc;if(t instanceof nd)return Zc;if(Array.isArray(t)){const e=t.length;let i;for(const e of t){const t=od(e);if(i){if(i===t)continue;i=Bc;break}i=t}return Uc(i||Bc,e)}return Xc}function ad(t){const e=typeof t;return null===t?"":"string"===e||"number"===e||"boolean"===e?String(t):t instanceof Sc||t instanceof id||t instanceof nd?t.toString():JSON.stringify(t)}class ld{constructor(t,e){this.type=t,this.value=e}static parse(t,e){if(2!==t.length)return e.error(`'literal' expression requires exactly one argument, but found ${t.length-1} instead.`);if(!sd(t[1]))return e.error("invalid value");const i=t[1];let n=od(i);const r=e.expectedType;return"array"!==n.kind||0!==n.N||!r||"array"!==r.kind||"number"==typeof r.N&&0!==r.N||(n=r),new ld(n,i)}evaluate(){return this.value}eachChild(){}outputDefined(){return!0}serialize(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof Sc?["rgba"].concat(this.value.toArray()):this.value instanceof id?this.value.serialize():this.value}}var hd=ld;var ud=class{constructor(t){this.name="ExpressionEvaluationError",this.message=t}toJSON(){return this.message}};const cd={string:Nc,number:Gc,boolean:qc,object:Xc};class dd{constructor(t,e){this.type=t,this.args=e}static parse(t,e){if(t.length<2)return e.error("Expected at least one argument.");let i,n=1;const r=t[0];if("array"===r){let r,s;if(t.length>2){const i=t[1];if("string"!=typeof i||!(i in cd)||"object"===i)return e.error('The item type argument of "array" must be one of string, number, boolean',1);r=cd[i],n++}else r=Bc;if(t.length>3){if(null!==t[2]&&("number"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to "array" must be a positive integer literal',2);s=t[2],n++}i=Uc(r,s)}else i=cd[r];const s=[];for(;nt.outputDefined()))}serialize(){const t=this.type,e=[t.kind];if("array"===t.kind){const i=t.itemType;if("string"===i.kind||"number"===i.kind||"boolean"===i.kind){e.push(i.kind);const n=t.N;("number"==typeof n||this.args.length>1)&&e.push(n)}}return e.concat(this.args.map((t=>t.serialize())))}}var pd=dd;class gd{constructor(t){this.type=Yc,this.sections=t}static parse(t,e){if(t.length<2)return e.error("Expected at least one argument.");const i=t[1];if(!Array.isArray(i)&&"object"==typeof i)return e.error("First argument must be an image or text section.");const n=[];let r=!1;for(let i=1;i<=t.length-1;++i){const s=t[i];if(r&&"object"==typeof s&&!Array.isArray(s)){r=!1;let t=null;if(s["font-scale"]&&(t=e.parse(s["font-scale"],1,Gc),!t))return null;let i=null;if(s["text-font"]&&(i=e.parse(s["text-font"],1,Uc(Nc)),!i))return null;let o=null;if(s["text-color"]&&(o=e.parse(s["text-color"],1,Wc),!o))return null;const a=n[n.length-1];a.scale=t,a.font=i,a.textColor=o}else{const s=e.parse(t[i],1,Bc);if(!s)return null;const o=s.type.kind;if("string"!==o&&"value"!==o&&"null"!==o&&"resolvedImage"!==o)return e.error("Formatted text type must be 'string', 'value', 'image' or 'null'.");r=!0,n.push({content:s,scale:null,font:null,textColor:null})}}return new gd(n)}evaluate(t){return new id(this.sections.map((e=>{const i=e.content.evaluate(t);return od(i)===Zc?new ed("",i,null,null,null):new ed(ad(i),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(","):null,e.textColor?e.textColor.evaluate(t):null)})))}eachChild(t){for(const e of this.sections)t(e.content),e.scale&&t(e.scale),e.font&&t(e.font),e.textColor&&t(e.textColor)}outputDefined(){return!1}serialize(){const t=["format"];for(const e of this.sections){t.push(e.content.serialize());const i={};e.scale&&(i["font-scale"]=e.scale.serialize()),e.font&&(i["text-font"]=e.font.serialize()),e.textColor&&(i["text-color"]=e.textColor.serialize()),t.push(i)}return t}}class fd{constructor(t){this.type=Zc,this.input=t}static parse(t,e){if(2!==t.length)return e.error("Expected two arguments.");const i=e.parse(t[1],1,Nc);return i?new fd(i):e.error("No image name provided.")}evaluate(t){const e=this.input.evaluate(t),i=nd.fromString(e);return i&&t.availableImages&&(i.available=t.availableImages.indexOf(e)>-1),i}eachChild(t){t(this.input)}outputDefined(){return!1}serialize(){return["image",this.input.serialize()]}}const md={"to-boolean":qc,"to-color":Wc,"to-number":Gc,"to-string":Nc};class yd{constructor(t,e){this.type=t,this.args=e}static parse(t,e){if(t.length<2)return e.error("Expected at least one argument.");const i=t[0];if(("to-boolean"===i||"to-string"===i)&&2!==t.length)return e.error("Expected one argument.");const n=md[i],r=[];for(let i=1;i4?`Invalid rbga value ${JSON.stringify(e)}: expected an array containing either three or four numeric values.`:rd(e[0],e[1],e[2],e[3]),!i))return new Sc(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new ud(i||`Could not parse color from value '${"string"==typeof e?e:String(JSON.stringify(e))}'`)}if("number"===this.type.kind){let e=null;for(const i of this.args){if(e=i.evaluate(t),null===e)return 0;const n=Number(e);if(!isNaN(n))return n}throw new ud(`Could not convert ${JSON.stringify(e)} to number.`)}return"formatted"===this.type.kind?id.fromString(ad(this.args[0].evaluate(t))):"resolvedImage"===this.type.kind?nd.fromString(ad(this.args[0].evaluate(t))):ad(this.args[0].evaluate(t))}eachChild(t){this.args.forEach(t)}outputDefined(){return this.args.every((t=>t.outputDefined()))}serialize(){if("formatted"===this.type.kind)return new gd([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if("resolvedImage"===this.type.kind)return new fd(this.args[0]).serialize();const t=[`to-${this.type.kind}`];return this.eachChild((e=>{t.push(e.serialize())})),t}}var _d=yd;const xd=["Unknown","Point","LineString","Polygon"];var vd=class{constructor(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={},this.availableImages=null,this.canonical=null,this.featureTileCoord=null,this.featureDistanceData=null}id(){return this.feature&&void 0!==this.feature.id?this.feature.id:null}geometryType(){return this.feature?"number"==typeof this.feature.type?xd[this.feature.type]:this.feature.type:null}geometry(){return this.feature&&"geometry"in this.feature?this.feature.geometry:null}canonicalID(){return this.canonical}properties(){return this.feature&&this.feature.properties||{}}distanceFromCenter(){if(this.featureTileCoord&&this.featureDistanceData){const t=this.featureDistanceData.center,e=this.featureDistanceData.scale,{x:i,y:n}=this.featureTileCoord,r=i*e-t[0],s=n*e-t[1];return this.featureDistanceData.bearing[0]*r+this.featureDistanceData.bearing[1]*s}return 0}parseColor(t){let e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=Sc.parse(t)),e}};class wd{constructor(t,e,i,n){this.name=t,this.type=e,this._evaluate=i,this.args=n}evaluate(t){return this._evaluate(t,this.args)}eachChild(t){this.args.forEach(t)}outputDefined(){return!1}serialize(){return[this.name].concat(this.args.map((t=>t.serialize())))}static parse(t,e){const i=t[0],n=wd.definitions[i];if(!n)return e.error(`Unknown expression "${i}". If you wanted a literal array, use ["literal", [...]].`,0);const r=Array.isArray(n)?n[0]:n.type,s=Array.isArray(n)?[[n[1],n[2]]]:n.overloads,o=s.filter((([e])=>!Array.isArray(e)||e.length===t.length-1));let a=null;for(const[n,s]of o){a=new Kd(e.registry,e.path,null,e.scope);const o=[];let l=!1;for(let e=1;e{return e=t,Array.isArray(e)?`(${e.map($c).join(", ")})`:`(${$c(e.type)}...)`;var e})).join(" | "),n=[];for(let i=1;i=e[2])&&(!(t[1]<=e[1])&&!(t[3]>=e[3])))}function Rd(t,e){const i=(180+t[0])/360;const n=(r=t[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+r*Math.PI/360)))/360);var r;const s=Math.pow(2,e.z);return[Math.round(i*s*Sd),Math.round(n*s*Sd)]}function Id(t,e,i){const n=t[0]-e[0],r=t[1]-e[1],s=t[0]-i[0],o=t[1]-i[1];return n*o-s*r==0&&n*s<=0&&r*o<=0}function Md(t,e,i){return e[1]>t[1]!=i[1]>t[1]&&t[0]<(i[0]-e[0])*(t[1]-e[1])/(i[1]-e[1])+e[0]}function kd(t,e){let i=!1;for(let n=0,r=e.length;n0&&c<0||u<0&&c>0}function Ld(t,e,i,n){const r=[e[0]-t[0],e[1]-t[1]],s=[n[0]-i[0],n[1]-i[1]];return 0!=(o=s)[0]*(a=r)[1]-o[1]*a[0]&&!(!Pd(t,e,i,n)||!Pd(i,n,t,e));var o,a}function Ad(t,e,i){for(const n of i)for(let i=0;ii[2]){const e=.5*n;let r=t[0]-i[0]>e?-n:i[0]-t[0]>e?n:0;0===r&&(r=t[0]-i[2]>e?-n:i[2]-t[0]>e?n:0),t[0]+=r}Ed(e,t)}function Nd(t,e,i,n){const r=Math.pow(2,n.z)*Sd,s=[n.x*Sd,n.y*Sd],o=[];if(!t)return o;for(const n of t)for(const t of n){const n=[t.x+s[0],t.y+s[1]];Gd(n,e,i,r),o.push(n)}return o}function qd(t,e,i,n){const r=Math.pow(2,n.z)*Sd,s=[n.x*Sd,n.y*Sd],o=[];if(!t)return o;for(const i of t){const t=[];for(const n of i){const i=[n.x+s[0],n.y+s[1]];Ed(e,i),t.push(i)}o.push(t)}if(e[2]-e[0]<=r/2){!function(t){t[0]=t[1]=1/0,t[2]=t[3]=-1/0}(e);for(const t of o)for(const n of t)Gd(n,e,i,r)}return o}class Wd{constructor(t,e){this.type=qc,this.geojson=t,this.geometries=e}static parse(t,e){if(2!==t.length)return e.error(`'within' expression requires exactly one argument, but found ${t.length-1} instead.`);if(sd(t[1])){const e=t[1];if("FeatureCollection"===e.type)for(let t=0;t{e&&!Bd(t)&&(e=!1)})),e}function Vd(t){if(t instanceof bd&&"feature-state"===t.name)return!1;let e=!0;return t.eachChild((t=>{e&&!Vd(t)&&(e=!1)})),e}function Yd(t,e){if(t instanceof bd&&e.indexOf(t.name)>=0)return!1;let i=!0;return t.eachChild((t=>{i&&!Yd(t,e)&&(i=!1)})),i}class Zd{constructor(t,e){this.type=e.type,this.name=t,this.boundExpression=e}static parse(t,e){if(2!==t.length||"string"!=typeof t[1])return e.error("'var' expression requires exactly one string literal argument.");const i=t[1];return e.scope.has(i)?new Zd(i,e.scope.get(i)):e.error(`Unknown variable "${i}". Make sure "${i}" has been bound in an enclosing "let" expression before using it.`,1)}evaluate(t){return this.boundExpression.evaluate(t)}eachChild(){}outputDefined(){return!1}serialize(){return["var",this.name]}}var Ud=Zd;class $d{constructor(t,e=[],i,n=new zc,r=[]){this.registry=t,this.path=e,this.key=e.map((t=>`[${t}]`)).join(""),this.scope=n,this.errors=r,this.expectedType=i}parse(t,e,i,n,r={}){return e?this.concat(e,i,n)._parse(t,r):this._parse(t,r)}_parse(t,e){function i(t,e,i){return"assert"===i?new pd(e,[t]):"coerce"===i?new _d(e,[t]):t}if(null!==t&&"string"!=typeof t&&"boolean"!=typeof t&&"number"!=typeof t||(t=["literal",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');const n=t[0];if("string"!=typeof n)return this.error(`Expression name must be a string, but found ${typeof n} instead. If you wanted a literal array, use ["literal", [...]].`,0),null;const r=this.registry[n];if(r){let n=r.parse(t,this);if(!n)return null;if(this.expectedType){const t=this.expectedType,r=n.type;if("string"!==t.kind&&"number"!==t.kind&&"boolean"!==t.kind&&"object"!==t.kind&&"array"!==t.kind||"value"!==r.kind)if("color"!==t.kind&&"formatted"!==t.kind&&"resolvedImage"!==t.kind||"value"!==r.kind&&"string"!==r.kind){if(this.checkSubtype(t,r))return null}else n=i(n,t,e.typeAnnotation||"coerce");else n=i(n,t,e.typeAnnotation||"assert")}if(!(n instanceof hd)&&"resolvedImage"!==n.type.kind&&Hd(n)){const t=new vd;try{n=new hd(n.type,n.evaluate(t))}catch(t){return this.error(t.message),null}}return n}return this.error(`Unknown expression "${n}". If you wanted a literal array, use ["literal", [...]].`,0)}return void 0===t?this.error("'undefined' value invalid. Use null instead."):"object"==typeof t?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error(`Expected an array, but found ${typeof t} instead.`)}concat(t,e,i){const n="number"==typeof t?this.path.concat(t):this.path,r=i?this.scope.concat(i):this.scope;return new $d(this.registry,n,e||null,r,this.errors)}error(t,...e){const i=`${this.key}${e.map((t=>`[${t}]`)).join("")}`;this.errors.push(new Dc(i,t))}checkSubtype(t,e){const i=Hc(t,e);return i&&this.error(i),i}}var Kd=$d;function Hd(t){if(t instanceof Ud)return Hd(t.boundExpression);if(t instanceof bd&&"error"===t.name)return!1;if(t instanceof Cd)return!1;if(t instanceof Xd)return!1;const e=t instanceof _d||t instanceof pd;let i=!0;return t.eachChild((t=>{i=e?i&&Hd(t):i&&t instanceof hd})),!!i&&(Bd(t)&&Yd(t,["zoom","heatmap-density","line-progress","sky-radial-progress","accumulated","is-supported-script","pitch","distance-from-center"]))}function Jd(t,e){const i=t.length-1;let n,r,s=0,o=i,a=0;for(;s<=o;)if(a=Math.floor((s+o)/2),n=t[a],r=t[a+1],n<=e){if(a===i||ee))throw new ud("Input is not a number.");o=a-1}return 0}class Qd{constructor(t,e,i){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(const[t,e]of i)this.labels.push(t),this.outputs.push(e)}static parse(t,e){if(t.length-1<4)return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");const i=e.parse(t[1],1,Gc);if(!i)return null;const n=[];let r=null;e.expectedType&&"value"!==e.expectedType.kind&&(r=e.expectedType);for(let i=1;i=s)return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',a);const h=e.parse(o,l,r);if(!h)return null;r=r||h.type,n.push([s,h])}return new Qd(r,i,n)}evaluate(t){const e=this.labels,i=this.outputs;if(1===e.length)return i[0].evaluate(t);const n=this.input.evaluate(t);if(n<=e[0])return i[0].evaluate(t);const r=e.length;if(n>=e[r-1])return i[r-1].evaluate(t);return i[Jd(e,n)].evaluate(t)}eachChild(t){t(this.input);for(const e of this.outputs)t(e)}outputDefined(){return this.outputs.every((t=>t.outputDefined()))}serialize(){const t=["step",this.input.serialize()];for(let e=0;e0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t}}var tp=Qd,ep=ip;function ip(t,e,i,n){this.cx=3*t,this.bx=3*(i-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=i,this.p2y=n}ip.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},ip.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},ip.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},ip.prototype.solveCurveX=function(t,e){var i,n,r,s,o;for(void 0===e&&(e=1e-6),r=t,o=0;o<8;o++){if(s=this.sampleCurveX(r)-t,Math.abs(s)(n=1))return n;for(;is?i=r:n=r,r=.5*(n-i)+i}return r},ip.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var np=fc(ep);function rp(t,e,i){return t*(1-i)+e*i}var sp=Object.freeze({__proto__:null,number:rp,color:function(t,e,i){return new Sc(rp(t.r,e.r,i),rp(t.g,e.g,i),rp(t.b,e.b,i),rp(t.a,e.a,i))},array:function(t,e,i){return t.map(((t,n)=>rp(t,e[n],i)))}});const op=.95047,ap=1,lp=1.08883,hp=4/29,up=6/29,cp=3*up*up,dp=up*up*up,pp=Math.PI/180,gp=180/Math.PI;function fp(t){return t>dp?Math.pow(t,1/3):t/cp+hp}function mp(t){return t>up?t*t*t:cp*(t-hp)}function yp(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function _p(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function xp(t){const e=_p(t.r),i=_p(t.g),n=_p(t.b),r=fp((.4124564*e+.3575761*i+.1804375*n)/op),s=fp((.2126729*e+.7151522*i+.072175*n)/ap);return{l:116*s-16,a:500*(r-s),b:200*(s-fp((.0193339*e+.119192*i+.9503041*n)/lp)),alpha:t.a}}function vp(t){let e=(t.l+16)/116,i=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=ap*mp(e),i=op*mp(i),n=lp*mp(n),new Sc(yp(3.2404542*i-1.5371385*e-.4985314*n),yp(-.969266*i+1.8760108*e+.041556*n),yp(.0556434*i-.2040259*e+1.0572252*n),t.alpha)}function wp(t,e,i){const n=e-t;return t+i*(n>180||n<-180?n-360*Math.round(n/360):n)}const bp={forward:xp,reverse:vp,interpolate:function(t,e,i){return{l:rp(t.l,e.l,i),a:rp(t.a,e.a,i),b:rp(t.b,e.b,i),alpha:rp(t.alpha,e.alpha,i)}}},Cp={forward:function(t){const{l:e,a:i,b:n}=xp(t),r=Math.atan2(n,i)*gp;return{h:r<0?r+360:r,c:Math.sqrt(i*i+n*n),l:e,alpha:t.a}},reverse:function(t){const e=t.h*pp,i=t.c;return vp({l:t.l,a:Math.cos(e)*i,b:Math.sin(e)*i,alpha:t.alpha})},interpolate:function(t,e,i){return{h:wp(t.h,e.h,i),c:rp(t.c,e.c,i),l:rp(t.l,e.l,i),alpha:rp(t.alpha,e.alpha,i)}}};class Sp{constructor(t,e,i,n,r){this.type=t,this.operator=e,this.interpolation=i,this.input=n,this.labels=[],this.outputs=[];for(const[t,e]of r)this.labels.push(t),this.outputs.push(e)}static interpolationFactor(t,e,i,n){let r=0;if("exponential"===t.name)r=Ep(e,t.base,i,n);else if("linear"===t.name)r=Ep(e,1,i,n);else if("cubic-bezier"===t.name){const s=t.controlPoints;r=new np(s[0],s[1],s[2],s[3]).solve(Ep(e,1,i,n))}return r}static parse(t,e){let[i,n,r,...s]=t;if(!Array.isArray(n)||0===n.length)return e.error("Expected an interpolation type expression.",1);if("linear"===n[0])n={name:"linear"};else if("exponential"===n[0]){const t=n[1];if("number"!=typeof t)return e.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:t}}else{if("cubic-bezier"!==n[0])return e.error(`Unknown interpolation type ${String(n[0])}`,1,0);{const t=n.slice(1);if(4!==t.length||t.some((t=>"number"!=typeof t||t<0||t>1)))return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:t}}}if(t.length-1<4)return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(r=e.parse(r,2,Gc),!r)return null;const o=[];let a=null;"interpolate-hcl"===i||"interpolate-lab"===i?a=Wc:e.expectedType&&"value"!==e.expectedType.kind&&(a=e.expectedType);for(let t=0;t=i)return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',r);const h=e.parse(n,l,a);if(!h)return null;a=a||h.type,o.push([i,h])}return"number"===a.kind||"color"===a.kind||"array"===a.kind&&"number"===a.itemType.kind&&"number"==typeof a.N?new Sp(a,i,n,r,o):e.error(`Type ${$c(a)} is not interpolatable.`)}evaluate(t){const e=this.labels,i=this.outputs;if(1===e.length)return i[0].evaluate(t);const n=this.input.evaluate(t);if(n<=e[0])return i[0].evaluate(t);const r=e.length;if(n>=e[r-1])return i[r-1].evaluate(t);const s=Jd(e,n),o=e[s],a=e[s+1],l=Sp.interpolationFactor(this.interpolation,n,o,a),h=i[s].evaluate(t),u=i[s+1].evaluate(t);return"interpolate"===this.operator?sp[this.type.kind.toLowerCase()](h,u,l):"interpolate-hcl"===this.operator?Cp.reverse(Cp.interpolate(Cp.forward(h),Cp.forward(u),l)):bp.reverse(bp.interpolate(bp.forward(h),bp.forward(u),l))}eachChild(t){t(this.input);for(const e of this.outputs)t(e)}outputDefined(){return this.outputs.every((t=>t.outputDefined()))}serialize(){let t;t="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);const e=[this.operator,t,this.input.serialize()];for(let t=0;tHc(n,t.type)));return new Rp(s?Bc:i,r)}evaluate(t){let e,i=null,n=0;for(const r of this.args){if(n++,i=r.evaluate(t),i&&i instanceof nd&&!i.available&&(e||(e=i),i=null,n===this.args.length))return e;if(null!==i)break}return i}eachChild(t){this.args.forEach(t)}outputDefined(){return this.args.every((t=>t.outputDefined()))}serialize(){const t=["coalesce"];return this.eachChild((e=>{t.push(e.serialize())})),t}}var Ip=Rp;class Mp{constructor(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e}evaluate(t){return this.result.evaluate(t)}eachChild(t){for(const e of this.bindings)t(e[1]);t(this.result)}static parse(t,e){if(t.length<4)return e.error(`Expected at least 3 arguments, but found ${t.length-1} instead.`);const i=[];for(let n=1;n=i.length)throw new ud(`Array index out of bounds: ${e} > ${i.length-1}.`);if(e!==Math.floor(e))throw new ud(`Array index must be an integer, but found ${e} instead.`);return i[e]}eachChild(t){t(this.index),t(this.input)}outputDefined(){return!1}serialize(){return["at",this.index.serialize(),this.input.serialize()]}}var Pp=Fp;class Lp{constructor(t,e){this.type=qc,this.needle=t,this.haystack=e}static parse(t,e){if(3!==t.length)return e.error(`Expected 2 arguments, but found ${t.length-1} instead.`);const i=e.parse(t[1],1,Bc),n=e.parse(t[2],2,Bc);return i&&n?Jc(i.type,[qc,Nc,Gc,jc,Bc])?new Lp(i,n):e.error(`Expected first argument to be of type boolean, string, number or null, but found ${$c(i.type)} instead`):null}evaluate(t){const e=this.needle.evaluate(t),i=this.haystack.evaluate(t);if(null==i)return!1;if(!Qc(e,["boolean","string","number","null"]))throw new ud(`Expected first argument to be of type boolean, string, number or null, but found ${$c(od(e))} instead.`);if(!Qc(i,["string","array"]))throw new ud(`Expected second argument to be of type array or string, but found ${$c(od(i))} instead.`);return i.indexOf(e)>=0}eachChild(t){t(this.needle),t(this.haystack)}outputDefined(){return!0}serialize(){return["in",this.needle.serialize(),this.haystack.serialize()]}}var Ap=Lp;class Dp{constructor(t,e,i){this.type=Gc,this.needle=t,this.haystack=e,this.fromIndex=i}static parse(t,e){if(t.length<=2||t.length>=5)return e.error(`Expected 3 or 4 arguments, but found ${t.length-1} instead.`);const i=e.parse(t[1],1,Bc),n=e.parse(t[2],2,Bc);if(!i||!n)return null;if(!Jc(i.type,[qc,Nc,Gc,jc,Bc]))return e.error(`Expected first argument to be of type boolean, string, number or null, but found ${$c(i.type)} instead`);if(4===t.length){const r=e.parse(t[3],3,Gc);return r?new Dp(i,n,r):null}return new Dp(i,n)}evaluate(t){const e=this.needle.evaluate(t),i=this.haystack.evaluate(t);if(!Qc(e,["boolean","string","number","null"]))throw new ud(`Expected first argument to be of type boolean, string, number or null, but found ${$c(od(e))} instead.`);if(!Qc(i,["string","array"]))throw new ud(`Expected second argument to be of type array or string, but found ${$c(od(i))} instead.`);if(this.fromIndex){const n=this.fromIndex.evaluate(t);return i.indexOf(e,n)}return i.indexOf(e)}eachChild(t){t(this.needle),t(this.haystack),this.fromIndex&&t(this.fromIndex)}outputDefined(){return!1}serialize(){if(null!=this.fromIndex&&void 0!==this.fromIndex){const t=this.fromIndex.serialize();return["index-of",this.needle.serialize(),this.haystack.serialize(),t]}return["index-of",this.needle.serialize(),this.haystack.serialize()]}}var Op=Dp;class zp{constructor(t,e,i,n,r,s){this.inputType=t,this.type=e,this.input=i,this.cases=n,this.outputs=r,this.otherwise=s}static parse(t,e){if(t.length<5)return e.error(`Expected at least 4 arguments, but found only ${t.length-1}.`);if(t.length%2!=1)return e.error("Expected an even number of arguments.");let i,n;e.expectedType&&"value"!==e.expectedType.kind&&(n=e.expectedType);const r={},s=[];for(let o=2;oNumber.MAX_SAFE_INTEGER)return h.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);if("number"==typeof t&&Math.floor(t)!==t)return h.error("Numeric branch labels must be integer values.");if(i){if(h.checkSubtype(i,od(t)))return null}else i=od(t);if(void 0!==r[String(t)])return h.error("Branch labels must be unique.");r[String(t)]=s.length}const u=e.parse(l,o,n);if(!u)return null;n=n||u.type,s.push(u)}const o=e.parse(t[1],1,Bc);if(!o)return null;const a=e.parse(t[t.length-1],t.length-1,n);return a?"value"!==o.type.kind&&e.concat(1).checkSubtype(i,o.type)?null:new zp(i,n,o,r,s,a):null}evaluate(t){const e=this.input.evaluate(t);return(od(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)}eachChild(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)}outputDefined(){return this.outputs.every((t=>t.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const t=["match",this.input.serialize()],e=Object.keys(this.cases).sort(),i=[],n={};for(const t of e){const e=n[this.cases[t]];void 0===e?(n[this.cases[t]]=i.length,i.push([this.cases[t],[t]])):i[e][1].push(t)}const r=t=>"number"===this.inputType.kind?Number(t):t;for(const[e,n]of i)1===n.length?t.push(r(n[0])):t.push(n.map(r)),t.push(this.outputs[e].serialize());return t.push(this.otherwise.serialize()),t}}var jp=zp;class Gp{constructor(t,e,i){this.type=t,this.branches=e,this.otherwise=i}static parse(t,e){if(t.length<4)return e.error(`Expected at least 3 arguments, but found only ${t.length-1}.`);if(t.length%2!=0)return e.error("Expected an odd number of arguments.");let i;e.expectedType&&"value"!==e.expectedType.kind&&(i=e.expectedType);const n=[];for(let r=1;re.outputDefined()))&&this.otherwise.outputDefined()}serialize(){const t=["case"];return this.eachChild((e=>{t.push(e.serialize())})),t}}var Np=Gp;class qp{constructor(t,e,i,n){this.type=t,this.input=e,this.beginIndex=i,this.endIndex=n}static parse(t,e){if(t.length<=2||t.length>=5)return e.error(`Expected 3 or 4 arguments, but found ${t.length-1} instead.`);const i=e.parse(t[1],1,Bc),n=e.parse(t[2],2,Gc);if(!i||!n)return null;if(!Jc(i.type,[Uc(Bc),Nc,Bc]))return e.error(`Expected first argument to be of type array or string, but found ${$c(i.type)} instead`);if(4===t.length){const r=e.parse(t[3],3,Gc);return r?new qp(i.type,i,n,r):null}return new qp(i.type,i,n)}evaluate(t){const e=this.input.evaluate(t),i=this.beginIndex.evaluate(t);if(!Qc(e,["string","array"]))throw new ud(`Expected first argument to be of type array or string, but found ${$c(od(e))} instead.`);if(this.endIndex){const n=this.endIndex.evaluate(t);return e.slice(i,n)}return e.slice(i)}eachChild(t){t(this.input),t(this.beginIndex),this.endIndex&&t(this.endIndex)}outputDefined(){return!1}serialize(){if(null!=this.endIndex&&void 0!==this.endIndex){const t=this.endIndex.serialize();return["slice",this.input.serialize(),this.beginIndex.serialize(),t]}return["slice",this.input.serialize(),this.beginIndex.serialize()]}}var Wp=qp;function Xp(t,e){return"=="===t||"!="===t?"boolean"===e.kind||"string"===e.kind||"number"===e.kind||"null"===e.kind||"value"===e.kind:"string"===e.kind||"number"===e.kind||"value"===e.kind}function Bp(t,e,i,n){return 0===n.compare(e,i)}function Vp(t,e,i){const n="=="!==t&&"!="!==t;return class r{constructor(t,e,i){this.type=qc,this.lhs=t,this.rhs=e,this.collator=i,this.hasUntypedArgument="value"===t.type.kind||"value"===e.type.kind}static parse(t,e){if(3!==t.length&&4!==t.length)return e.error("Expected two or three arguments.");const i=t[0];let s=e.parse(t[1],1,Bc);if(!s)return null;if(!Xp(i,s.type))return e.concat(1).error(`"${i}" comparisons are not supported for type '${$c(s.type)}'.`);let o=e.parse(t[2],2,Bc);if(!o)return null;if(!Xp(i,o.type))return e.concat(2).error(`"${i}" comparisons are not supported for type '${$c(o.type)}'.`);if(s.type.kind!==o.type.kind&&"value"!==s.type.kind&&"value"!==o.type.kind)return e.error(`Cannot compare types '${$c(s.type)}' and '${$c(o.type)}'.`);n&&("value"===s.type.kind&&"value"!==o.type.kind?s=new pd(o.type,[s]):"value"!==s.type.kind&&"value"===o.type.kind&&(o=new pd(s.type,[o])));let a=null;if(4===t.length){if("string"!==s.type.kind&&"string"!==o.type.kind&&"value"!==s.type.kind&&"value"!==o.type.kind)return e.error("Cannot use collator to compare non-string types.");if(a=e.parse(t[3],3,Vc),!a)return null}return new r(s,o,a)}evaluate(r){const s=this.lhs.evaluate(r),o=this.rhs.evaluate(r);if(n&&this.hasUntypedArgument){const e=od(s),i=od(o);if(e.kind!==i.kind||"string"!==e.kind&&"number"!==e.kind)throw new ud(`Expected arguments for "${t}" to be (string, string) or (number, number), but found (${e.kind}, ${i.kind}) instead.`)}if(this.collator&&!n&&this.hasUntypedArgument){const t=od(s),i=od(o);if("string"!==t.kind||"string"!==i.kind)return e(r,s,o)}return this.collator?i(r,s,o,this.collator.evaluate(r)):e(r,s,o)}eachChild(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)}outputDefined(){return!0}serialize(){const e=[t];return this.eachChild((t=>{e.push(t.serialize())})),e}}}const Yp=Vp("==",(function(t,e,i){return e===i}),Bp),Zp=Vp("!=",(function(t,e,i){return e!==i}),(function(t,e,i,n){return!Bp(0,e,i,n)})),Up=Vp("<",(function(t,e,i){return e",(function(t,e,i){return e>i}),(function(t,e,i,n){return n.compare(e,i)>0})),Kp=Vp("<=",(function(t,e,i){return e<=i}),(function(t,e,i,n){return n.compare(e,i)<=0})),Hp=Vp(">=",(function(t,e,i){return e>=i}),(function(t,e,i,n){return n.compare(e,i)>=0}));class Jp{constructor(t,e,i,n,r,s){this.type=Nc,this.number=t,this.locale=e,this.currency=i,this.unit=n,this.minFractionDigits=r,this.maxFractionDigits=s}static parse(t,e){if(3!==t.length)return e.error("Expected two arguments.");const i=e.parse(t[1],1,Gc);if(!i)return null;const n=t[2];if("object"!=typeof n||Array.isArray(n))return e.error("NumberFormat options argument must be an object.");let r=null;if(n.locale&&(r=e.parse(n.locale,1,Nc),!r))return null;let s=null;if(n.currency&&(s=e.parse(n.currency,1,Nc),!s))return null;let o=null;if(n.unit&&(o=e.parse(n.unit,1,Nc),!o))return null;let a=null;if(n["min-fraction-digits"]&&(a=e.parse(n["min-fraction-digits"],1,Gc),!a))return null;let l=null;return n["max-fraction-digits"]&&(l=e.parse(n["max-fraction-digits"],1,Gc),!l)?null:new Jp(i,r,s,o,a,l)}evaluate(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:(this.currency?"currency":this.unit&&"unit")||"decimal",currency:this.currency?this.currency.evaluate(t):void 0,unit:this.unit?this.unit.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))}eachChild(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.unit&&t(this.unit),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)}outputDefined(){return!1}serialize(){const t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.unit&&(t.unit=this.unit.serialize()),this.minFractionDigits&&(t["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),t]}}class Qp{constructor(t){this.type=Gc,this.input=t}static parse(t,e){if(2!==t.length)return e.error(`Expected 1 argument, but found ${t.length-1} instead.`);const i=e.parse(t[1],1);return i?"array"!==i.type.kind&&"string"!==i.type.kind&&"value"!==i.type.kind?e.error(`Expected argument of type string or array, but found ${$c(i.type)} instead.`):new Qp(i):null}evaluate(t){const e=this.input.evaluate(t);if("string"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new ud(`Expected value to be of type string or array, but found ${$c(od(e))} instead.`)}eachChild(t){t(this.input)}outputDefined(){return!1}serialize(){const t=["length"];return this.eachChild((e=>{t.push(e.serialize())})),t}}const tg={"==":Yp,"!=":Zp,">":$p,"<":Up,">=":Hp,"<=":Kp,array:pd,at:Pp,boolean:pd,case:Np,coalesce:Ip,collator:Cd,format:gd,image:fd,in:Ap,"index-of":Op,interpolate:Tp,"interpolate-hcl":Tp,"interpolate-lab":Tp,length:Qp,let:kp,literal:hd,match:jp,number:pd,"number-format":Jp,object:pd,slice:Wp,step:tp,string:pd,"to-boolean":_d,"to-color":_d,"to-number":_d,"to-string":_d,var:Ud,within:Xd};function eg(t,[e,i,n,r]){e=e.evaluate(t),i=i.evaluate(t),n=n.evaluate(t);const s=r?r.evaluate(t):1,o=rd(e,i,n,s);if(o)throw new ud(o);return new Sc(e/255*s,i/255*s,n/255*s,s)}function ig(t,e){return t in e}function ng(t,e){const i=e[t];return void 0===i?null:i}function rg(t){return{type:t}}bd.register(tg,{error:[{kind:"error"},[Nc],(t,[e])=>{throw new ud(e.evaluate(t))}],typeof:[Nc,[Bc],(t,[e])=>$c(od(e.evaluate(t)))],"to-rgba":[Uc(Gc,4),[Wc],(t,[e])=>e.evaluate(t).toArray()],rgb:[Wc,[Gc,Gc,Gc],eg],rgba:[Wc,[Gc,Gc,Gc,Gc],eg],has:{type:qc,overloads:[[[Nc],(t,[e])=>ig(e.evaluate(t),t.properties())],[[Nc,Xc],(t,[e,i])=>ig(e.evaluate(t),i.evaluate(t))]]},get:{type:Bc,overloads:[[[Nc],(t,[e])=>ng(e.evaluate(t),t.properties())],[[Nc,Xc],(t,[e,i])=>ng(e.evaluate(t),i.evaluate(t))]]},"feature-state":[Bc,[Nc],(t,[e])=>ng(e.evaluate(t),t.featureState||{})],properties:[Xc,[],t=>t.properties()],"geometry-type":[Nc,[],t=>t.geometryType()],id:[Bc,[],t=>t.id()],zoom:[Gc,[],t=>t.globals.zoom],pitch:[Gc,[],t=>t.globals.pitch||0],"distance-from-center":[Gc,[],t=>t.distanceFromCenter()],"heatmap-density":[Gc,[],t=>t.globals.heatmapDensity||0],"line-progress":[Gc,[],t=>t.globals.lineProgress||0],"sky-radial-progress":[Gc,[],t=>t.globals.skyRadialProgress||0],accumulated:[Bc,[],t=>void 0===t.globals.accumulated?null:t.globals.accumulated],"+":[Gc,rg(Gc),(t,e)=>{let i=0;for(const n of e)i+=n.evaluate(t);return i}],"*":[Gc,rg(Gc),(t,e)=>{let i=1;for(const n of e)i*=n.evaluate(t);return i}],"-":{type:Gc,overloads:[[[Gc,Gc],(t,[e,i])=>e.evaluate(t)-i.evaluate(t)],[[Gc],(t,[e])=>-e.evaluate(t)]]},"/":[Gc,[Gc,Gc],(t,[e,i])=>e.evaluate(t)/i.evaluate(t)],"%":[Gc,[Gc,Gc],(t,[e,i])=>e.evaluate(t)%i.evaluate(t)],ln2:[Gc,[],()=>Math.LN2],pi:[Gc,[],()=>Math.PI],e:[Gc,[],()=>Math.E],"^":[Gc,[Gc,Gc],(t,[e,i])=>Math.pow(e.evaluate(t),i.evaluate(t))],sqrt:[Gc,[Gc],(t,[e])=>Math.sqrt(e.evaluate(t))],log10:[Gc,[Gc],(t,[e])=>Math.log(e.evaluate(t))/Math.LN10],ln:[Gc,[Gc],(t,[e])=>Math.log(e.evaluate(t))],log2:[Gc,[Gc],(t,[e])=>Math.log(e.evaluate(t))/Math.LN2],sin:[Gc,[Gc],(t,[e])=>Math.sin(e.evaluate(t))],cos:[Gc,[Gc],(t,[e])=>Math.cos(e.evaluate(t))],tan:[Gc,[Gc],(t,[e])=>Math.tan(e.evaluate(t))],asin:[Gc,[Gc],(t,[e])=>Math.asin(e.evaluate(t))],acos:[Gc,[Gc],(t,[e])=>Math.acos(e.evaluate(t))],atan:[Gc,[Gc],(t,[e])=>Math.atan(e.evaluate(t))],min:[Gc,rg(Gc),(t,e)=>Math.min(...e.map((e=>e.evaluate(t))))],max:[Gc,rg(Gc),(t,e)=>Math.max(...e.map((e=>e.evaluate(t))))],abs:[Gc,[Gc],(t,[e])=>Math.abs(e.evaluate(t))],round:[Gc,[Gc],(t,[e])=>{const i=e.evaluate(t);return i<0?-Math.round(-i):Math.round(i)}],floor:[Gc,[Gc],(t,[e])=>Math.floor(e.evaluate(t))],ceil:[Gc,[Gc],(t,[e])=>Math.ceil(e.evaluate(t))],"filter-==":[qc,[Nc,Bc],(t,[e,i])=>t.properties()[e.value]===i.value],"filter-id-==":[qc,[Bc],(t,[e])=>t.id()===e.value],"filter-type-==":[qc,[Nc],(t,[e])=>t.geometryType()===e.value],"filter-<":[qc,[Nc,Bc],(t,[e,i])=>{const n=t.properties()[e.value],r=i.value;return typeof n==typeof r&&n{const i=t.id(),n=e.value;return typeof i==typeof n&&i":[qc,[Nc,Bc],(t,[e,i])=>{const n=t.properties()[e.value],r=i.value;return typeof n==typeof r&&n>r}],"filter-id->":[qc,[Bc],(t,[e])=>{const i=t.id(),n=e.value;return typeof i==typeof n&&i>n}],"filter-<=":[qc,[Nc,Bc],(t,[e,i])=>{const n=t.properties()[e.value],r=i.value;return typeof n==typeof r&&n<=r}],"filter-id-<=":[qc,[Bc],(t,[e])=>{const i=t.id(),n=e.value;return typeof i==typeof n&&i<=n}],"filter->=":[qc,[Nc,Bc],(t,[e,i])=>{const n=t.properties()[e.value],r=i.value;return typeof n==typeof r&&n>=r}],"filter-id->=":[qc,[Bc],(t,[e])=>{const i=t.id(),n=e.value;return typeof i==typeof n&&i>=n}],"filter-has":[qc,[Bc],(t,[e])=>e.value in t.properties()],"filter-has-id":[qc,[],t=>null!==t.id()&&void 0!==t.id()],"filter-type-in":[qc,[Uc(Nc)],(t,[e])=>e.value.indexOf(t.geometryType())>=0],"filter-id-in":[qc,[Uc(Bc)],(t,[e])=>e.value.indexOf(t.id())>=0],"filter-in-small":[qc,[Nc,Uc(Bc)],(t,[e,i])=>i.value.indexOf(t.properties()[e.value])>=0],"filter-in-large":[qc,[Nc,Uc(Bc)],(t,[e,i])=>function(t,e,i,n){for(;i<=n;){const r=i+n>>1;if(e[r]===t)return!0;e[r]>t?n=r-1:i=r+1}return!1}(t.properties()[e.value],i.value,0,i.value.length-1)],all:{type:qc,overloads:[[[qc,qc],(t,[e,i])=>e.evaluate(t)&&i.evaluate(t)],[rg(qc),(t,e)=>{for(const i of e)if(!i.evaluate(t))return!1;return!0}]]},any:{type:qc,overloads:[[[qc,qc],(t,[e,i])=>e.evaluate(t)||i.evaluate(t)],[rg(qc),(t,e)=>{for(const i of e)if(i.evaluate(t))return!0;return!1}]]},"!":[qc,[qc],(t,[e])=>!e.evaluate(t)],"is-supported-script":[qc,[Nc],(t,[e])=>{const i=t.globals&&t.globals.isSupportedScript;return!i||i(e.evaluate(t))}],upcase:[Nc,[Nc],(t,[e])=>e.evaluate(t).toUpperCase()],downcase:[Nc,[Nc],(t,[e])=>e.evaluate(t).toLowerCase()],concat:[Nc,rg(Bc),(t,e)=>e.map((e=>ad(e.evaluate(t)))).join("")],"resolved-locale":[Nc,[Vc],(t,[e])=>e.evaluate(t).resolvedLocale()]});var sg=tg;function og(t){return{result:"success",value:t}}function ag(t){return{result:"error",value:t}}function lg(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}class hg{constructor(t,e){this.expression=t,this._warningHistory={},this._evaluator=new vd,this._defaultValue=e?function(t){return"color"===t.type&&(lg(t.default)||Array.isArray(t.default))?new Sc(0,0,0,0):"color"===t.type?Sc.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&"enum"===e.type?e.values:null}evaluateWithoutErrorHandling(t,e,i,n,r,s,o,a){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=i,this._evaluator.canonical=n||null,this._evaluator.availableImages=r||null,this._evaluator.formattedSection=s,this._evaluator.featureTileCoord=o||null,this._evaluator.featureDistanceData=a||null,this.expression.evaluate(this._evaluator)}evaluate(t,e,i,n,r,s,o,a){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=i||null,this._evaluator.canonical=n||null,this._evaluator.availableImages=r||null,this._evaluator.formattedSection=s||null,this._evaluator.featureTileCoord=o||null,this._evaluator.featureDistanceData=a||null;try{const t=this.expression.evaluate(this._evaluator);if(null==t||"number"==typeof t&&t!=t)return this._defaultValue;if(this._enumValues&&!(t in this._enumValues))throw new ud(`Expected value to be one of ${Object.keys(this._enumValues).map((t=>JSON.stringify(t))).join(", ")}, but found ${JSON.stringify(t)} instead.`);return t}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,"undefined"!=typeof console&&console.warn(t.message)),this._defaultValue}}}function ug(t,e){const i=new Kd(sg,[],e?function(t){const e={color:Wc,string:Nc,number:Gc,enum:Nc,boolean:qc,formatted:Yc,resolvedImage:Zc};if("array"===t.type)return Uc(e[t.value]||Bc,t.length);return e[t.type]}(e):void 0),n=i.parse(t,void 0,void 0,void 0,e&&"string"===e.type?{typeAnnotation:"coerce"}:void 0);return n?og(new hg(n,e)):ag(i.errors)}class cg{constructor(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent="constant"!==t&&!Vd(e.expression)}evaluateWithoutErrorHandling(t,e,i,n,r,s){return this._styleExpression.evaluateWithoutErrorHandling(t,e,i,n,r,s)}evaluate(t,e,i,n,r,s){return this._styleExpression.evaluate(t,e,i,n,r,s)}}class dg{constructor(t,e,i,n){this.kind=t,this.zoomStops=i,this._styleExpression=e,this.isStateDependent="camera"!==t&&!Vd(e.expression),this.interpolationType=n}evaluateWithoutErrorHandling(t,e,i,n,r,s){return this._styleExpression.evaluateWithoutErrorHandling(t,e,i,n,r,s)}evaluate(t,e,i,n,r,s){return this._styleExpression.evaluate(t,e,i,n,r,s)}interpolationFactor(t,e,i){return this.interpolationType?Tp.interpolationFactor(this.interpolationType,t,e,i):0}}function pg(t,e){if("error"===(t=ug(t,e)).result)return t;const i=t.value.expression,n=Bd(i);if(!n&&!function(t){return"data-driven"===t["property-type"]}(e))return ag([new Dc("","data expressions not supported")]);const r=Yd(i,["zoom","pitch","distance-from-center"]);if(!r&&!function(t){return!!t.expression&&t.expression.parameters.indexOf("zoom")>-1}(e))return ag([new Dc("","zoom expressions not supported")]);const s=gg(i);if(!s&&!r)return ag([new Dc("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(s instanceof Dc)return ag([s]);if(s instanceof Tp&&!function(t){return!!t.expression&&t.expression.interpolated}(e))return ag([new Dc("",'"interpolate" expressions cannot be used with this property')]);if(!s)return og(new cg(n?"constant":"source",t.value));const o=s instanceof Tp?s.interpolation:void 0;return og(new dg(n?"camera":"composite",t.value,s.labels,o))}function gg(t){let e=null;if(t instanceof kp)e=gg(t.result);else if(t instanceof Ip){for(const i of t.args)if(e=gg(i),e)break}else(t instanceof tp||t instanceof Tp)&&t.input instanceof bd&&"zoom"===t.input.name&&(e=t);return e instanceof Dc||t.eachChild((t=>{const i=gg(t);i instanceof Dc?e=i:!e&&i?e=new Dc("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):e&&i&&e!==i&&(e=new Dc("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))})),e}function fg(t){if(Array.isArray(t))return t.map(fg);if(t instanceof Object&&!(t instanceof Number||t instanceof String||t instanceof Boolean)){const e={};for(const i in t)e[i]=fg(t[i]);return e}return function(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}(t)}var mg={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},terrain:{type:"terrain"},fog:{type:"fog"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},projection:{type:"projection"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},promoteId:{type:"promoteId"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},volatile:{type:"boolean",default:!1},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},filter:{type:"*"},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterMinPoints:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1},promoteId:{type:"promoteId"}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{},sky:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background","layout_sky"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_sky:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"},"fill-extrusion-edge-radius":{type:"number",private:!0,default:0,minimum:0,maximum:1,"property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"resolvedImage",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_symbol:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature","pitch","distance-from-center"]}},filter_fill:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_line:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_circle:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},"filter_fill-extrusion":{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_heatmap:{type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{},within:{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:24,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},in:{group:"Lookup"},"index-of":{group:"Lookup"},slice:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},image:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Camera"},pitch:{group:"Camera"},"distance-from-center":{group:"Camera"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},"sky-radial-progress":{group:"sky"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},distance:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},within:{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},fog:{range:{type:"array",default:[.5,10],minimum:-20,maximum:20,length:2,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"high-color":{type:"color","property-type":"data-constant",default:"#245cdf",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"space-color":{type:"color","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,"#010b19",7,"#367ab9"],expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"horizon-blend":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],4,.2,7,.1],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"star-intensity":{type:"number","property-type":"data-constant",default:["interpolate",["linear"],["zoom"],5,.35,6,0],minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},projection:{name:{type:"enum",values:{albers:{},equalEarth:{},equirectangular:{},lambertConformalConic:{},mercator:{},naturalEarth:{},winkelTripel:{},globe:{}},default:"mercator",required:!0},center:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-180,-90],maximum:[180,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]},parallels:{type:"array",length:2,value:"number","property-type":"data-constant",minimum:[-90,-90],maximum:[90,90],transition:!1,requires:[{name:["albers","lambertConformalConic"]}]}},terrain:{source:{type:"string",required:!0},exaggeration:{type:"number","property-type":"data-constant",default:1,minimum:0,maximum:1e3,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["source"]}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background","paint_sky"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-ambient-occlusion-intensity":{"property-type":"data-constant",type:"number",private:!0,default:0,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0},"fill-extrusion-ambient-occlusion-radius":{"property-type":"data-constant",type:"number",private:!0,default:3,minimum:0,expression:{interpolated:!0,parameters:["zoom"]},transition:!0,requires:["fill-extrusion-edge-radius"]}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!1,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"},"line-trim-offset":{type:"array",value:"number",length:2,default:[0,0],minimum:[0,0],maximum:[1,1],transition:!1,requires:[{source:"geojson",has:{lineMetrics:!0}}],"property-type":"constant"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"resolvedImage",transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_sky:{"sky-type":{type:"enum",values:{gradient:{},atmosphere:{}},default:"atmosphere",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun":{type:"array",value:"number",length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,requires:[{"sky-type":"atmosphere"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-atmosphere-sun-intensity":{type:"number",requires:[{"sky-type":"atmosphere"}],default:10,minimum:0,maximum:100,transition:!1,"property-type":"data-constant"},"sky-gradient-center":{type:"array",requires:[{"sky-type":"gradient"}],value:"number",default:[0,0],length:2,units:"degrees",minimum:[0,0],maximum:[360,180],transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient-radius":{type:"number",requires:[{"sky-type":"gradient"}],default:90,minimum:0,maximum:180,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"sky-gradient":{type:"color",default:["interpolate",["linear"],["sky-radial-progress"],.8,"#87ceeb",1,"white"],transition:!1,requires:[{"sky-type":"gradient"}],expression:{interpolated:!0,parameters:["sky-radial-progress"]},"property-type":"color-ramp"},"sky-atmosphere-halo-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-atmosphere-color":{type:"color",default:"white",transition:!1,requires:[{"sky-type":"atmosphere"}],"property-type":"data-constant"},"sky-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}},promoteId:{"*":{type:"string"}}};function yg(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case"has":return t.length>=2&&"$id"!==t[1]&&"$type"!==t[1];case"in":return t.length>=3&&("string"!=typeof t[1]||Array.isArray(t[2]));case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case"any":case"all":for(const e of t.slice(1))if(!yg(e)&&"boolean"!=typeof e)return!1;return!0;default:return!0}}function _g(t,e="fill"){if(null==t)return{filter:()=>!0,needGeometry:!1,needFeature:!1};yg(t)||(t=Eg(t));const i=t;let n=!0;try{n=function(t){if(!wg(t))return t;let e=fg(t);return vg(e),e=xg(e),e}(i)}catch(t){console.warn(`Failed to extract static filter. Filter will continue working, but at higher memory usage and slower framerate.\nThis is most likely a bug, please report this via https://github.com/mapbox/mapbox-gl-js/issues/new?assignees=&labels=&template=Bug_report.md\nand paste the contents of this message in the report.\nThank you!\nFilter Expression:\n${JSON.stringify(i,null,2)}\n `)}const r=mg[`filter_${e}`],s=ug(n,r);let o=null;if("error"===s.result)throw new Error(s.value.map((t=>`${t.key}: ${t.message}`)).join(", "));o=(t,e,i)=>s.value.evaluate(t,e,{},i);let a=null,l=null;if(n!==i){const t=ug(i,r);if("error"===t.result)throw new Error(t.value.map((t=>`${t.key}: ${t.message}`)).join(", "));a=(e,i,n,r,s)=>t.value.evaluate(e,i,{},n,void 0,void 0,r,s),l=!Bd(t.value.expression)}return{filter:o,dynamicFilter:a||void 0,needGeometry:Sg(n),needFeature:!!l}}function xg(t){if(!Array.isArray(t))return t;const e=function(t){if(bg.has(t[0]))for(let e=1;exg(t)))}function vg(t){let e=!1;const i=[];if("case"===t[0]){for(let n=1;n",">=","<","<=","to-boolean"]);function Cg(t,e){return te?1:0}function Sg(t){if(!Array.isArray(t))return!1;if("within"===t[0])return!0;for(let e=1;e"===e||"<="===e||">="===e?Tg(t[1],t[2],e):"any"===e?(i=t.slice(1),["any"].concat(i.map(Eg))):"all"===e?["all"].concat(t.slice(1).map(Eg)):"none"===e?["all"].concat(t.slice(1).map(Eg).map(Mg)):"in"===e?Rg(t[1],t.slice(2)):"!in"===e?Mg(Rg(t[1],t.slice(2))):"has"===e?Ig(t[1]):"!has"===e?Mg(Ig(t[1])):"within"!==e||t}function Tg(t,e,i){switch(t){case"$type":return[`filter-type-${i}`,e];case"$id":return[`filter-id-${i}`,e];default:return[`filter-${i}`,t,e]}}function Rg(t,e){if(0===e.length)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some((t=>typeof t!=typeof e[0]))?["filter-in-large",t,["literal",e.sort(Cg)]]:["filter-in-small",t,["literal",e]]}}function Ig(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function Mg(t){return["!",t]}var kg=["type","source","source-layer","minzoom","maxzoom","filter","layout"];function Fg(t,e){const i={};for(const e in t)"ref"!==e&&(i[e]=t[e]);return kg.forEach((t=>{t in e&&(i[t]=e[t])})),i}function Pg(t){t=t.slice();const e=Object.create(null);for(let i=0;i1?h[h.length-2].toLowerCase():"";if(u==c||u==c.replace("-","")||d+"-"+u==c){r=Lg[c],h.pop(),d&&c.startsWith(d)&&h.pop();break}}"number"==typeof u&&(r=u);var p=h.join(Ag).replace("Klokantech Noto Sans","Noto Sans");-1!==p.indexOf(Ag)&&(p='"'+p+'"'),o.push(p)}n=Og[t]=[s,r,o]}return n[0]+Ag+n[1]+Ag+e+"px"+(i?"/"+i:"")+Ag+n[2]}));const jg="https://api.mapbox.com";function Gg(t){const e="mapbox://";return 0!==t.indexOf(e)?"":t.slice(9)}function Ng(t,e){const i=Gg(t);if(!i)return decodeURI(new URL(t,location.href).href);const n="styles/";if(0!==i.indexOf(n))throw new Error(`unexpected style url: ${t}`);const r=i.slice(7);return`${jg}/styles/v1/${r}?&access_token=${e}`}function qg(t,e,i,n){const r=new URL(t,n),s=Gg(t);if(!s)return e?(r.searchParams.has(i)||r.searchParams.set(i,e),decodeURI(r.href)):decodeURI(r.href);if("mapbox.satellite"===s){return`https://api.mapbox.com/v4/${s}/{z}/{x}/{y}${window.devicePixelRatio>=1.5?"@2x":""}.webp?access_token=${e}`}return`https://{a-d}.tiles.mapbox.com/v4/${s}/{z}/{x}/{y}.vector.pbf?access_token=${e}`}const Wg={},Xg={};let Bg=0;function Vg(t){return t.id||(t.id=Bg++),t.id}function Yg(t){let e=Wg[t.id];return e||(e={},Wg[Vg(t)]=e),e}function Zg(t){return t*Math.PI/180}const Ug=function(){const t=[];for(let e=78271.51696402048;t.length<=24;e/=2)t.push(e);return t}(),$g=new $a({extent:di("EPSG:3857").getExtent(),resolutions:Ug});function Kg(t,e){if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas)return new OffscreenCanvas(t,e);const i=document.createElement("canvas");return i.width=t,i.height=e,i}function Hg(t,e){let i=0;const n=e.length;for(;ir)).then((t=>(t instanceof Request||(t=new Request(t)),t.headers.get("Accept")||t.headers.set("Accept","application/json"),n&&(n.request=t),fetch(t).then((function(t){return delete Jg[e],t.ok?t.json():Promise.reject(new Error("Error fetching source "+e))})).catch((function(t){return delete Jg[e],Promise.reject(new Error("Error fetching source "+e))})))));return Jg[e]=[r,s],s}function tf(t,e){if("string"!=typeof t)return Promise.resolve(t);if(!t.trim().startsWith("{"))return Qg("Style",t=Ng(t,e.accessToken),e);try{const e=JSON.parse(t);return Promise.resolve(e)}catch(t){return Promise.reject(t)}}const ef={};function nf(t,e,i={}){const n=[e,JSON.stringify(t)].toString();let r=ef[n];if(!r||i.transformRequest){let s;i.transformRequest&&(s=(t,e)=>{const n=i.transformRequest&&i.transformRequest(e,"Tiles")||e;if(t instanceof Rh)t.setLoader(((e,i,r)=>{d((()=>n)).then((i=>{fetch(i).then((t=>t.arrayBuffer())).then((i=>{const n=t.getFormat().readFeatures(i,{extent:e,featureProjection:r});t.setFeatures(n)})).catch((e=>t.setState(jo.ERROR)))}))}));else{const e=t.getImage();d((()=>n)).then((i=>{i instanceof Request?fetch(i).then((t=>t.blob())).then((t=>{const i=URL.createObjectURL(t);e.addEventListener("load",(()=>URL.revokeObjectURL(i))),e.addEventListener("error",(()=>URL.revokeObjectURL(i))),e.src=i})).catch((e=>t.setState(jo.ERROR))):e.src=i}))}});const o=t.url;if(o&&!t.tiles){const n=qg(o,i.accessToken,i.accessTokenParam||"access_token",e||location.href);if(o.startsWith("mapbox://"))r=Promise.resolve({tileJson:Object.assign({},t,{url:void 0,tiles:kh(n)}),tileLoadFunction:s});else{const t={};r=Qg("Source",n,i,t).then((function(e){return e.tiles=e.tiles.map((function(n){return"tms"===e.scheme&&(n=n.replace("{y}","{-y}")),qg(n,i.accessToken,i.accessTokenParam||"access_token",t.request.url)})),Promise.resolve({tileJson:e,tileLoadFunction:s})}))}}else t=Object.assign({},t,{tiles:t.tiles.map((function(n){return"tms"===t.scheme&&(n=n.replace("{y}","{-y}")),qg(n,i.accessToken,i.accessTokenParam||"access_token",e||location.href)}))}),r=Promise.resolve({tileJson:Object.assign({},t),tileLoadFunction:s});ef[n]=r}return r}function rf(t,e,i,n){const r=document.createElement("canvas"),s=[2*i*e.pixelRatio+e.width,2*i*e.pixelRatio+e.height];r.width=s[0],r.height=s[1];const o=r.getContext("2d");o.drawImage(t,e.x,e.y,e.width,e.height,i*e.pixelRatio,i*e.pixelRatio,e.width,e.height);const a=o.getImageData(0,0,s[0],s[1]);o.globalCompositeOperation="destination-over",o.fillStyle=`rgba(${255*n.r},${255*n.g},${255*n.b},${n.a})`;const l=a.data;for(let t=0,n=a.width;t0&&o.arc(t,r,i*e.pixelRatio,0,2*Math.PI)}return o.fill(),r}function sf(t,e,i){const n=Math.max(0,Math.min(1,(i-t)/(e-t)));return n*n*(3-2*n)}function of(t,e,i){const n=document.createElement("canvas");n.width=e.width,n.height=e.height;const r=n.getContext("2d");r.drawImage(t,e.x,e.y,e.width,e.height,0,0,e.width,e.height);const s=r.getImageData(0,0,e.width,e.height),o=s.data;for(let t=0,e=s.width;t0?(o[r+0]=Math.round(255*i.r*l),o[r+1]=Math.round(255*i.g*l),o[r+2]=Math.round(255*i.b*l),o[r+3]=Math.round(255*l)):o[r+3]=0}return r.putImageData(s,0,0),n}const af=Array(256).join(" ");function lf(t,e){if(e>=.05){let i="";const n=t.split("\n"),r=af.slice(0,Math.round(e/.1));for(let t=0,e=n.length;t0&&(i+="\n"),i+=n[t].split("").join(r);return i}return t}let hf;function uf(){return hf||(hf=Kg(1,1).getContext("2d")),hf}function cf(t,e){return uf().measureText(t).width+(t.length-1)*e}const df={};function pf(t,e,i,n){if(-1!==t.indexOf("\n")){const r=t.split("\n"),s=[];for(let t=0,o=r.length;t1){const t=uf();t.font=e;const r=t.measureText("M").width*i;let a="";const l=[];for(let t=0,e=o.length;t1;++t){const i=l[t];if(cf(i,n)<.35*r){const r=t>0?cf(l[t-1],n):1/0,s=t.7*r&&cf(s,n)<.6*r){const o=i.split(" "),a=o.pop();cf(a,n)<.2*r&&(l[t]=o.join(" "),l[t+1]=a+" "+s),e-=1}}s=l.join("\n")}else s=t;s=lf(s,n),df[r]=s}return s}const gf=/font-family: ?([^;]*);/,ff=/("|')/g;let mf;function yf(t){if(!mf){mf={};const t=document.styleSheets;for(let e=0,i=t.length;e`${t.key}: ${t.message}`)).join(", "));return i.value},Cf={},Sf={zoom:0};let Ef,Tf;function Rf(t,e,i,n,r,s,o){const a=t.id;s||(s={},console.warn("No functionCache provided to getValue()")),s[a]||(s[a]={});const l=s[a];if(!l[i]){let n=(t[e]||Cf)[i];const r=mg[`${e}_${t.type}`][i];void 0===n&&(n=r.default);let s=(h=n,Array.isArray(h)&&h.length>0&&"string"==typeof h[0]&&h[0]in sg);if(!s&&lg(n)&&(n=Tc(n,r),s=!0),s){const t=bf(n,r);l[i]=t.evaluate.bind(t)}else"color"==r.type&&(n=Sc.parse(n)),l[i]=function(){return n}}var h;return Sf.zoom=n,l[i](Sf,r,o)}function If(t,e,i,n,r){if(!Rf(t,"layout",`${n}-allow-overlap`,e,i,r))return"declutter";return Rf(t,"layout",`${n}-ignore-placement`,e,i,r)?"none":"obstacle"}function Mf(t,e,i,n,r){return r||console.warn("No filterCache provided to evaluateFilter()"),t in r||(r[t]=_g(e).filter),Sf.zoom=n,r[t](Sf,i)}function kf(t,e){if(t){if(0===t.a||0===e)return;const i=t.a;return e=void 0===e?1:e,0===i?"transparent":"rgba("+Math.round(255*t.r/i)+","+Math.round(255*t.g/i)+","+Math.round(255*t.b/i)+","+i*e+")"}return t}const Ff=/\{[^{}}]*\}/g;function Pf(t,e){return t.replace(Ff,(function(t){return e[t.slice(1,-1)]||""}))}const Lf={};function Af(t,e,i,n=Ug,r=void 0,s=void 0,o=void 0,a=void 0){if("string"==typeof e&&(e=JSON.parse(e)),8!=e.version)throw new Error("glStyle version 8 required.");let l,h,u;if(Lf[function(t,e){return Vg(t)+"."+P(e)}(e,t)]=Array.from(arguments),s)if("undefined"!=typeof Image){const e=new Image;let i;d((()=>s)).then((t=>{t instanceof Request?fetch(t).then((t=>t.blob())).then((t=>{i=URL.createObjectURL(t),e.src=i})).catch((()=>{})):(e.crossOrigin="anonymous",e.src=t,i&&URL.revokeObjectURL(i))})),e.onload=function(){l=e,h=[e.width,e.height],t.changed(),e.onload=null}}else if("undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope){const t=self;t.postMessage({action:"loadImage",src:s}),t.addEventListener("message",(function(t){"imageLoaded"===t.data.action&&t.data.src===s&&(l=t.data.image,h=[l.width,l.height])}))}const c=Pg(e.layers),p={},g=[],f={},m={},y=Yg(e),_=function(t){let e=Xg[t.id];return e||(e={},Xg[Vg(t)]=e),e}(e);let x;for(let t=0,n=c.length;t=R.maxzoom)continue;const F=R.filter;if(!F||Mf(I,F,S,x,_)){let n,c,g,_,I,F;const P=p.index;if(3==C&&("fill"==R.type||"fill-extrusion"==R.type))if(c=Rf(R,"paint",R.type+"-opacity",x,S,y,E),R.type+"-pattern"in k){const t=Rf(R,"paint",R.type+"-pattern",x,S,y,E);if(t){const e="string"==typeof t?Pf(t,d):t.toString();if(l&&r&&r[e]){++T,F=b[T],F&&F.getFill()&&!F.getStroke()&&!F.getText()||(F=new ys({fill:new cs}),b[T]=F),g=F.getFill(),F.setZIndex(P);const t=e+"."+c;let i=m[t];if(!i){const n=r[e],s=Kg(n.width,n.height),o=s.getContext("2d");o.globalAlpha=c,o.drawImage(l,n.x,n.y,n.width,n.height,0,0,n.width,n.height),i=o.createPattern(s,"repeat"),m[t]=i}g.setColor(i)}}}else n=kf(Rf(R,"paint",R.type+"-color",x,S,y,E),c),R.type+"-outline-color"in k&&(I=kf(Rf(R,"paint",R.type+"-outline-color",x,S,y,E),c)),I||(I=n),(n||I)&&(++T,F=b[T],(!F||n&&!F.getFill()||!n&&F.getFill()||I&&!F.getStroke()||!I&&F.getStroke()||F.getText())&&(F=new ys({fill:n?new cs:void 0,stroke:I?new ds:void 0}),b[T]=F),n&&(g=F.getFill(),g.setColor(n)),I&&(_=F.getStroke(),_.setColor(I),_.setWidth(.5)),F.setZIndex(P));if(1!=C&&"line"==R.type){n="line-pattern"in k?void 0:kf(Rf(R,"paint","line-color",x,S,y,E),Rf(R,"paint","line-opacity",x,S,y,E));const t=Rf(R,"paint","line-width",x,S,y,E);n&&t>0&&(++T,F=b[T],F&&F.getStroke()&&!F.getFill()&&!F.getText()||(F=new ys({stroke:new ds}),b[T]=F),_=F.getStroke(),_.setLineCap(Rf(R,"layout","line-cap",x,S,y,E)),_.setLineJoin(Rf(R,"layout","line-join",x,S,y,E)),_.setMiterLimit(Rf(R,"layout","line-miter-limit",x,S,y,E)),_.setColor(n),_.setWidth(t),_.setLineDash(k["line-dasharray"]?Rf(R,"paint","line-dasharray",x,S,y,E).map((function(e){return e*t})):null),F.setZIndex(P))}let L,A,D,O,z,j,G,N,q,W=!1,X=null,B=0;if((1==C||2==C)&&"icon-image"in M){const e=Rf(R,"layout","icon-image",x,S,y,E);if(e){let n;L="string"==typeof e?Pf(e,d):e.toString();const o=a?a(t,L):void 0;if(l&&r&&r[L]||o){const t=Rf(R,"layout","icon-rotation-alignment",x,S,y,E);if(2==C){const e=i.getGeometry();if(e.getFlatMidpoint||e.getFlatMidpoints){const i=e.getExtent();if(Math.sqrt(Math.max(Math.pow((i[2]-i[0])/s,2),Math.pow((i[3]-i[1])/s,2)))>150){const i="MultiLineString"===e.getType()?e.getFlatMidpoints():e.getFlatMidpoint();Tf||(Ef=[NaN,NaN],Tf=new qa("Point",Ef,[],2,{},void 0)),n=Tf,Ef[0]=i[0],Ef[1]=i[1];if("line"===Rf(R,"layout","symbol-placement",x,S,y,E)&&"map"===t){const t=e.getStride(),n=e.getFlatCoordinates();for(let e=0,r=n.length-t;e=l&&i[0]<=u&&i[1]>=h&&i[1]<=c){B=Math.atan2(s-a,o-r);break}}}}}}if(2!==C||n){const e=Rf(R,"layout","icon-size",x,S,y,E),i=void 0!==k["icon-color"]?Rf(R,"paint","icon-color",x,S,y,E):null;if(!i||0!==i.a){const n=Rf(R,"paint","icon-halo-color",x,S,y,E),s=Rf(R,"paint","icon-halo-width",x,S,y,E);let a=`${L}.${e}.${s}.${n}`;if(null!==i&&(a+=`.${i}`),A=f[a],!A){const c=If(R,x,S,"icon",y);let d;"icon-offset"in M&&(d=Rf(R,"layout","icon-offset",x,S,y,E).slice(0),d[0]*=e,d[1]*=-e);let p=i?[255*i.r,255*i.g,255*i.b,i.a]:void 0;if(o){const i={color:p,rotateWithView:"map"===t,displacement:d,declutterMode:c,scale:e};"string"==typeof o?i.src=o:(i.img=o,i.imgSize=[o.width,o.height]),A=new xs(i)}else{const o=r[L];let a,g,f;s?o.sdf?(a=rf(of(l,o,i||[0,0,0,1]),{x:0,y:0,width:o.width,height:o.height,pixelRatio:o.pixelRatio},s,n),p=void 0):a=rf(l,o,s,n):(o.sdf?(u||(u=of(l,{x:0,y:0,width:h[0],height:h[1]},{r:1,g:1,b:1,a:1})),a=u):a=l,g=[o.width,o.height],f=[o.x,o.y]),A=new xs({color:p,img:a,imgSize:h,size:g,offset:f,rotateWithView:"map"===t,scale:e/o.pixelRatio,displacement:d,declutterMode:c})}f[a]=A}}A&&(++T,F=b[T],F&&F.getImage()&&!F.getFill()&&!F.getStroke()||(F=new ys,b[T]=F),F.setGeometry(n),A.setRotation(B+Zg(Rf(R,"layout","icon-rotate",x,S,y,E))),A.setOpacity(Rf(R,"paint","icon-opacity",x,S,y,E)),A.setAnchor(wf[Rf(R,"layout","icon-anchor",x,S,y,E)]),F.setImage(A),X=F.getText(),F.setText(void 0),F.setZIndex(P),W=!0,D=!1)}else D=!0}}}if(1==C&&"circle"===R.type){++T,F=b[T],F&&F.getImage()&&!F.getFill()&&!F.getStroke()||(F=new ys,b[T]=F);const t="circle-radius"in k?Rf(R,"paint","circle-radius",x,S,y,E):5,e=kf(Rf(R,"paint","circle-stroke-color",x,S,y,E),Rf(R,"paint","circle-stroke-opacity",x,S,y,E)),i=Rf(R,"paint","circle-translate",x,S,y,E),n=kf(Rf(R,"paint","circle-color",x,S,y,E),Rf(R,"paint","circle-opacity",x,S,y,E)),r=Rf(R,"paint","circle-stroke-width",x,S,y,E),s=t+"."+e+"."+n+"."+r+"."+i[0]+"."+i[1];A=f[s],A||(A=new us({radius:t,displacement:[i[0],-i[1]],stroke:e&&r>0?new ds({width:r,color:e}):void 0,fill:n?new cs({color:n}):void 0,declutterMode:"none"}),f[s]=A),F.setImage(A),X=F.getText(),F.setText(void 0),F.setGeometry(void 0),F.setZIndex(P),W=!0}if("text-field"in M){G=Math.round(Rf(R,"layout","text-size",x,S,y,E));const t=Rf(R,"layout","text-font",x,S,y,E);j=Rf(R,"layout","text-line-height",x,S,y,E),z=zg(o?o(t,e.metadata?e.metadata["ol:webfonts"]:void 0):t,G,j),z.includes("sans-serif")||(z+=",sans-serif"),N=Rf(R,"layout","text-letter-spacing",x,S,y,E),q=Rf(R,"layout","text-max-width",x,S,y,E);const i=Rf(R,"layout","text-field",x,S,y,E);O="object"==typeof i&&i.sections?1===i.sections.length?i.toString():i.sections.reduce(((e,i,n)=>{const r=i.fontStack?i.fontStack.split(","):t,s=zg(o?o(r):r,G*(i.scale||1),j);let a=i.text;if("\n"===a)return e.push("\n",""),e;if(2!=C){a=pf(a,s,q,N).split("\n");for(let t=0,i=a.length;t0&&e.push("\n",""),e.push(a[t],s);return e}e.push(lf(a,N),s)}),[]):Pf(i,d).trim(),c=Rf(R,"paint","text-opacity",x,S,y,E)}if(O&&c&&!D){W||(++T,F=b[T],F&&F.getText()&&!F.getFill()&&!F.getStroke()||(F=new ys,b[T]=F),F.setImage(void 0),F.setGeometry(void 0));const t=If(R,x,S,"text",y);F.getText()||F.setText(X),X=F.getText(),(!X||"getDeclutterMode"in X&&X.getDeclutterMode()!==t)&&(X=new vs({padding:[2,2,2,2],declutterMode:t}),F.setText(X));const e=Rf(R,"layout","text-transform",x,S,y,E);"uppercase"==e?O=Array.isArray(O)?O.map(((t,e)=>e%2?t:t.toUpperCase())):O.toUpperCase():"lowercase"==e&&(O=Array.isArray(O)?O.map(((t,e)=>e%2?t:t.toLowerCase())):O.toLowerCase());const i=Array.isArray(O)?O:2==C?lf(O,N):pf(O,z,q,N);X.setText(i),X.setFont(z),X.setRotation(Zg(Rf(R,"layout","text-rotate",x,S,y,E)));const n=Rf(R,"layout","text-anchor",x,S,y,E),r=W||1==C?"point":Rf(R,"layout","symbol-placement",x,S,y,E);let s;if("line-center"===r?(X.setPlacement("line"),s="center"):X.setPlacement(r),"line"===r&&"function"==typeof X.setRepeat){const t=Rf(R,"layout","symbol-spacing",x,S,y,E);X.setRepeat(2*t)}X.setOverflow("point"===r);let o=Rf(R,"paint","text-halo-width",x,S,y,E);const a=Rf(R,"layout","text-offset",x,S,y,E),l=Rf(R,"paint","text-translate",x,S,y,E);let h=0,u=0;if("point"==r){s="center",-1!==n.indexOf("left")?(s="left",u=o):-1!==n.indexOf("right")&&(s="right",u=-o);const t=Rf(R,"layout","text-rotation-alignment",x,S,y,E);X.setRotateWithView("map"==t)}else X.setMaxAngle(Zg(Rf(R,"layout","text-max-angle",x,S,y,E))*O.length/i.length),X.setRotateWithView(!1);X.setTextAlign(s);let d="middle";0==n.indexOf("bottom")?(d="bottom",h=-o-.5*(j-1)*G):0==n.indexOf("top")&&(d="top",h=o+.5*(j-1)*G),X.setTextBaseline(d);const p=Rf(R,"layout","text-justify",x,S,y,E);X.setJustify("auto"===p?void 0:p),X.setOffsetX(a[0]*G+u+l[0]),X.setOffsetY(a[1]*G+h+l[1]),w.setColor(kf(Rf(R,"paint","text-color",x,S,y,E),c)),X.setFill(w);const g=kf(Rf(R,"paint","text-halo-color",x,S,y,E),c);if(g&&o>0){v.setColor(g),o*=2;const t=.5*G;v.setWidth(o<=t?o:t),X.setStroke(v)}else X.setStroke(void 0);const f=Rf(R,"layout","text-padding",x,S,y,E),m=X.getPadding();f!==m[0]&&(m[0]=f,m[1]=f,m[2]=f,m[3]=f),F.setZIndex(P)}}}return T>-1?(b.length=T+1,b):void 0};return t.setStyle(C),t.set("mapbox-source",x),t.set("mapbox-layers",g),t.set("mapbox-featurestate",t.get("mapbox-featurestate")||{}),C}function Df(t,e){const i=t[0],n=i.width,r=i.height,s=i.data,o=new Uint8ClampedArray(s.length),a=2*e.resolution,l=n-1,h=r-1,u=[0,0,0,0],c=2*Math.PI,d=Math.PI/2,p=Math.PI*e.sunEl/180,g=Math.PI*e.sunAz/180,f=Math.cos(p),m=Math.sin(p),y=e.highlightColor,_=e.shadowColor,x=e.accentColor,v=e.encoding;let w,b,C,S,E,T,R,I,M,k,F,P,L,A,D,O,z,j,G,N,q,W;function X(t,e="mapbox"){return"mapbox"===e?.1*(256*t[0]*256+256*t[1]+t[2])-1e4:"terrarium"===e?256*t[0]+t[1]+t[2]/256-32768:void 0}for(b=0;b<=h;++b)for(E=0===b?0:b-1,T=b===h?h:b+1,w=0;w<=l;++w)C=0===w?0:w-1,S=w===l?l:w+1,R=4*(b*n+C),u[0]=s[R],u[1]=s[R+1],u[2]=s[R+2],u[3]=s[R+3],I=e.vert*X(u,v),R=4*(b*n+S),u[0]=s[R],u[1]=s[R+1],u[2]=s[R+2],u[3]=s[R+3],M=e.vert*X(u,v),k=(M-I)/a,R=4*(E*n+w),u[0]=s[R],u[1]=s[R+1],u[2]=s[R+2],u[3]=s[R+3],I=e.vert*X(u,v),R=4*(T*n+w),u[0]=s[R],u[1]=s[R+1],u[2]=s[R+2],u[3]=s[R+3],M=e.vert*X(u,v),F=(M-I)/a,L=Math.atan2(F,-k),L=L<0?d-L:L>d?c-L+d:d-L,P=Math.atan(Math.sqrt(k*k+F*F)),W=m*Math.cos(P)+f*Math.sin(P)*Math.cos(g-L),A=Math.cos(P),D=255*W,G=Math.min(Math.max(2*e.sunEl,0),1),N=1.875-1.75*e.opacity,q=.5!==e.opacity?d*((Math.pow(N,P)-1)/(Math.pow(N,d)-1)):P,z={r:(1-A)*x.r*G*255,g:(1-A)*x.g*G*255,b:(1-A)*x.b*G*255,a:(1-A)*x.a*G*255},O=Math.abs(((L+g)/Math.PI+.5)%2-1),j={r:(y.r*(1-O)+_.r*O)*D,g:(y.g*(1-O)+_.g*O)*D,b:(y.b*(1-O)+_.b*O)*D,a:(y.a*(1-O)+_.a*O)*D},R=4*(b*n+w),o[R]=z.r*(1-O)+j.r,o[R+1]=z.g*(1-O)+j.g,o[R+2]=z.b*(1-O)+j.b,o[R+3]=s[R+3]*e.opacity*G*Math.sin(q);return new ImageData(o,n,r)}function Of(t,e=512){return t.getExtent()?Gu({extent:t.getExtent(),tileSize:e,maxZoom:22}).getResolutions():Ug}function zf(t,e){if(!e.accessToken){e=Object.assign({},e);new URL(t).searchParams.forEach(((t,i)=>{e.accessToken=t,e.accessTokenParam=i}))}return e}function jf(t,e,i="",n={},r=void 0){let s,o,a,l,h=!0;return"string"==typeof i||Array.isArray(i)?l=i:(a=i,l=a.source||a.layers,n=a),"string"==typeof n?(s=n,a={}):(s=n.styleUrl,a=n),!1===a.updateSource&&(h=!1),r||(r=a.resolutions),s||"string"!=typeof e||e.trim().startsWith("{")||(s=e),s&&(s=s.startsWith("data:")?location.href:Ng(s,a.accessToken),a=zf(s,a)),new Promise((function(i,n){tf(e,a).then((function(e){if(8!=e.version)return n(new Error("glStyle version 8 required."));if(!(t instanceof ih||t instanceof dc))return n(new Error("Can only apply to VectorLayer or VectorTileLayer"));const u=t instanceof dc?"vector":"geojson";if(l?o=Array.isArray(l)?e.layers.find((function(t){return t.id===l[0]})).source:l:(o=Object.keys(e.sources).find((function(t){return e.sources[t].type===u})),l=o),!o)return n(new Error(`No ${u} source found in the glStyle.`));function c(){if(!h)return Promise.resolve();if(t instanceof dc)return Xf(e.sources[o],s,a).then((function(e){const i=t.getSource();if(i?e!==i&&(i.setTileUrlFunction(e.getTileUrlFunction()),"function"==typeof i.setUrls&&"function"==typeof e.getUrls&&i.setUrls(e.getUrls()),i.format_||(i.format_=e.format_),i.getAttributions()||i.setAttributions(e.getAttributions()),i.getTileLoadFunction()===gc&&i.setTileLoadFunction(e.getTileLoadFunction()),yi(i.getProjection(),e.getProjection())&&(i.tileGrid=e.getTileGrid())):t.setSource(e),!isFinite(t.getMaxResolution())&&!isFinite(t.getMinZoom())){const e=t.getSource().getTileGrid();t.setMaxResolution(e.getResolution(e.getMinZoom()))}}));const i=e.sources[o];let n=t.getSource();n&&n.get("mapbox-source")===i||(n=Yf(i,s,a));const r=t.getSource();return r?n!==r&&(r.getAttributions()||r.setAttributions(n.getAttributions()),r.format_||(r.format_=n.getFormat()),r.url_=n.getUrl()):t.setSource(n),Promise.resolve()}let d,p,g,f;function m(){if(f||e.sprite&&!p)f?(t.setStyle(f),c().then(i).catch(n)):n(new Error("Something went wrong trying to apply style."));else{if(a.projection&&!r){const t=di(a.projection).getUnits();"m"!==t&&(r=Ug.map((e=>e/ee[t])))}f=Af(t,e,l,r,p,g,xf,a.getImage),t.getStyle()?c().then(i).catch(n):n(new Error(`Nothing to show for source [${o}]`))}}if(e.sprite){const t=new URL(function(t,e,i){const n=Gg(t);if(!n)return decodeURI(new URL(t,i).href);const r="sprites/";if(0!==n.indexOf(r))throw new Error(`unexpected sprites url: ${t}`);const s=n.slice(8);return`${jg}/styles/v1/${s}/sprite?access_token=${e}`}(e.sprite,a.accessToken,s||location.href));d=window.devicePixelRatio>=1.5?.5:1;const i=.5==d?"@2x":"";let r=t.origin+t.pathname+i+".json"+t.search;new Promise((function(e,i){Qg("Sprite",r,a).then(e).catch((function(n){r=t.origin+t.pathname+".json"+t.search,Qg("Sprite",r,a).then(e).catch(i)}))})).then((function(e){if(void 0===e&&n(new Error("No sprites found.")),p=e,g=t.origin+t.pathname+i+".png"+t.search,a.transformRequest){const t=a.transformRequest(g,"SpriteImage")||g;(t instanceof Request||t instanceof Promise)&&(g=t)}m()})).catch((function(t){n(new Error(`Sprites cannot be loaded: ${r}: ${t.message}`))}))}else m()})).catch(n)}))}const Gf={};function Nf(t,e){let i;return t.some((function(t){if(t.id==e)return i=t.source,!0})),i}function qf(t,e,i){const n=new lc({tileJSON:e,tileSize:t.tileSize||e.tileSize||512}),r=n.getTileJSON(),s=n.getTileGrid(),o=di(i.projection||"EPSG:3857"),a=function(t,e){const i=t.bounds;if(i){const t=mi([i[0],i[1]],e),n=mi([i[2],i[3]],e);return[t[0],t[1],n[0],n[1]]}return di(e).getExtent()}(r,o),l=o.getExtent(),h=r.minzoom||0,u=r.maxzoom||22,c={attributions:n.getAttributions(),projection:o,tileGrid:new $a({origin:l?Ue(l):s.getOrigin(0),extent:a||s.getExtent(),minZoom:h,resolutions:Of(o,e.tileSize).slice(0,u+1),tileSize:s.getTileSize(0)})};return Array.isArray(r.tiles)?c.urls=r.tiles:c.url=r.tiles,c}function Wf(t,e,i){const n=document.createElement("div");return n.className="ol-mapbox-style-background",n.style.position="absolute",n.style.width="100%",n.style.height="100%",new Zn({source:new rh({}),render(r){const s=function(t,e,i,n){const r={id:t.id,type:t.type},s=t.layout||{},o=t.paint||{};r.paint=o;const a=Hg(e,i.resolutions||Ug);let l;const h=Rf(r,"paint","background-color",a,Gf,n);return void 0!==o["background-opacity"]&&(l=Rf(r,"paint","background-opacity",a,Gf,n)),"none"==s.visibility?void 0:kf(h,l)}(t,r.viewState.resolution,e,i);return n.style.backgroundColor=s,n}})}function Xf(t,e,i){return new Promise((function(n,r){nf(t,e,i).then((function({tileJson:e,tileLoadFunction:r}){const s=qf(t,e,i);s.tileLoadFunction=r,s.format=new pu,n(new pc(s))})).catch(r)}))}function Bf(t){return`{bbox-${(t?t.getCode():"EPSG:3857").toLowerCase().replace(/[^a-z0-9]/g,"-")}}`}function Vf(t,e,i){const n=new zu;return function(t,e,i){return new Promise((function(n,r){nf(t,e,i).then((function({tileJson:e,tileLoadFunction:r}){const s=new lc({interpolate:void 0===i.interpolate||i.interpolate,transition:0,crossOrigin:"anonymous",tileJSON:e});s.tileGrid=qf(t,e,i).tileGrid,i.projection&&(s.projection=di(i.projection));const o=s.getTileUrlFunction();r&&s.setTileLoadFunction(r),s.setTileUrlFunction((function(t,e,i){const n=Bf(i);let r=o(t,e,i);if(-1!=r.indexOf(n)){const e=s.getTileGrid().getTileCoordExtent(t);r=r.replace(n,e.toString())}return r})),s.set("mapbox-source",t),n(s)})).catch((function(t){r(t)}))}))}(t,e,i).then((function(t){n.setSource(t)})).catch((function(){n.setSource(void 0)})),n}function Yf(t,e,i){const n=i.projection?new Nh({dataProjection:i.projection}):new Nh,r=t.data,s={};if("string"==typeof r){const s=qg(r,i.accessToken,i.accessTokenParam||"access_token",e||location.href);if(/\{bbox-[0-9a-z-]+\}/.test(s)){const e=(t,e,i)=>{const n=Bf(i);return s.replace(n,`${t.join(",")}`)},r=new xh({attributions:t.attribution,format:n,loader:(t,n,s,o,a)=>{Qg("GeoJSON","function"==typeof e?e(t,n,s):e,i).then((t=>{const e=r.getFormat().readFeatures(t,{featureProjection:s});r.addFeatures(e),o(e)})).catch((e=>{r.removeLoadedExtent(t),a()}))},strategy:gh});return r.set("mapbox-source",t),r}const o=new xh({attributions:t.attribution,format:n,url:s,loader:(t,e,n,r,a)=>{Qg("GeoJSON",s,i).then((t=>{const e=o.getFormat().readFeatures(t,{featureProjection:n});o.addFeatures(e),r(e)})).catch((e=>{o.removeLoadedExtent(t),a()}))}});return o}s.features=n.readFeatures(r,{featureProjection:"EPSG:3857"});const o=new xh(Object.assign({attributions:t.attribution,format:n},s));return o.set("mapbox-source",t),o}function Zf(t,e,i){let n=null;return function(r){t.paint&&"raster-opacity"in t.paint&&r.frameState.viewState.zoom!==n&&(n=r.frameState.viewState.zoom,delete i[t.id],function(t,e,i,n){const r=Rf(t,"paint","raster-opacity",i,Gf,n);e.setOpacity(r)}(t,e,n,i))}}function Uf(t,e,i,n){const r=Yg(t),s=t.layers,o=i.type,a=i.source||Nf(s,i.ref),l=t.sources[a];let h;if("background"==o)h=Wf(i,n,r);else if("vector"==l.type)h=function(t,e,i){const n=new dc({declutter:!0,visible:!1});return Xf(t,e,i).then((function(e){e.set("mapbox-source",t),n.setSource(e)})).catch((function(t){n.setSource(void 0)})),n}(l,e,n);else if("raster"==l.type)h=Vf(l,e,n),h.setVisible(!i.layout||"none"!==i.layout.visibility),h.on("prerender",Zf(i,h,r));else if("geojson"==l.type)h=function(t,e,i){return new ih({declutter:!0,source:Yf(t,e,i),visible:!1})}(l,e,n);else if("raster-dem"==l.type&&"hillshade"==i.type){const t=function(t,e,i){const n=Vf(t,e,i);return new Xh({source:new Ju({operationType:"image",operation:Df,sources:[n]})})}(l,e,n);h=t,t.getSource().on("beforeoperations",(function(t){const e=t.data;e.resolution=t.resolution;const s=Hg(t.resolution,n.resolutions||Ug);e.encoding=l.encoding,e.vert=5*Rf(i,"paint","hillshade-exaggeration",s,Gf,r),e.sunAz=Rf(i,"paint","hillshade-illumination-direction",s,Gf,r),e.sunEl=35,e.opacity=.3,e.highlightColor=Rf(i,"paint","hillshade-highlight-color",s,Gf,r),e.shadowColor=Rf(i,"paint","hillshade-shadow-color",s,Gf,r),e.accentColor=Rf(i,"paint","hillshade-accent-color",s,Gf,r)})),h.setVisible(!i.layout||"none"!==i.layout.visibility)}const u=a;return h&&h.set("mapbox-source",u),h}function $f(t,e,i,n){const r=[];let s=null;if(e instanceof Ra){if(s=e.getView(),!s.isDef()&&!s.getRotation()&&!s.getResolutions()){const t=n.projection?di(n.projection):s.getProjection();s=new Wn(Object.assign(s.getProperties(),{maxResolution:Ug[0]/ee[t.getUnits()],projection:n.projection||s.getProjection()})),e.setView(s)}"center"in t&&!s.getCenter()&&s.setCenter(mi(t.center,s.getProjection())),"zoom"in t&&void 0===s.getZoom()&&s.setResolution(Ug[0]/ee[s.getProjection().getUnits()]/Math.pow(2,t.zoom)),s.getCenter()&&void 0!==s.getZoom()||s.fit(s.getProjection().getExtent(),{nearest:!0,size:e.getSize()})}e.set("mapbox-style",t),e.set("mapbox-metadata",{styleUrl:i,options:n});const o=t.layers;let a,l,h,u=[];for(let s=0,c=o.length;s0||i>0)&&t.setMaxResolution(Math.min($g.getResolution(o),e.getResolution(i))+1e-9),a<24&&t.setMinResolution($g.getResolution(a)+1e-9)}}else o>0&&t.setMaxResolution($g.getResolution(o)+1e-9);u instanceof xh||u instanceof pc?jf(t,i,e,Object.assign({styleUrl:n},s)).then((function(){!function(t,e){function i(){const i=e.get("mapbox-style");if(!i)return;const n=Pg(i.layers),r=t.get("mapbox-layers"),s=n.filter((function(t){return r.includes(t.id)})).some((function(t){return!t.layout||!t.layout.visibility||"visible"===t.layout.visibility}));t.get("visible")!==s&&t.setVisible(s)}t.on("change",i),i()}(t,r),l()})).catch(h):l()}else h(new Error("Error accessing data for source "+t.get("mapbox-source")))};t.set("mapbox-layers",e);const c=r.getLayers();-1===c.getArray().indexOf(t)&&c.push(t),t.getSource()?u():t.once("change:source",u)}))}const Hf=[{center:[0,405e4],zoom:2},{center:[-10026264.955714773,3498225.377934253],zoom:12.3},{center:[-8120333.846364162,-5972314.327727663],zoom:10.15},{center:[12700564.586161729,2575397.3413926377],zoom:13.8},{center:[8976666.32253083,814262.3154676007],zoom:15.7},{center:[1284003.7367688504,5950927.737276901],zoom:11.19},{center:[-8468554.506387988,5696886.564463913],zoom:10.11},{center:[707717.3609533564,6361291.958635207],zoom:10.02},{center:[3345381.3050933336,-216864.19183635892],zoom:13.9},{center:[3318257.9642649507,-1786301.1175574847],zoom:6.1},{center:[19365301.097574536,-5033096.120372388],zoom:10.77},{center:[-13542913.807564376,5913315.884147839],zoom:11.59},{center:[9680854.2477813,3231923.470902604],zoom:8.06},{center:[-10341383.185823392,1826844.1155603195],zoom:9.27},{center:[3232422.751942559,5017252.706810253],zoom:12.25},{center:[-16373943.169136822,8651360.275919426],zoom:8.49},{center:[12475943.19806142,4172022.2635435928],zoom:9.91}],Jf=document.getElementById("map"),Qf=new Ra({target:Jf,view:new Wn(Hf[Math.random()*Hf.length|0])});Qf.addControl(new class extends tt{constructor(t){t=t||{},super({element:document.createElement("div"),target:t.target}),this.on,this.once,this.un,this.keys_=void 0!==t.keys&&t.keys,this.source_=t.source,this.isInFullscreen_=!1,this.boundHandleMapTargetChange_=this.handleMapTargetChange_.bind(this),this.cssClassName_=void 0!==t.className?t.className:"ol-full-screen",this.documentListeners_=[],this.activeClassName_=void 0!==t.activeClassName?t.activeClassName.split(" "):[this.cssClassName_+"-true"],this.inactiveClassName_=void 0!==t.inactiveClassName?t.inactiveClassName.split(" "):[this.cssClassName_+"-false"];const e=void 0!==t.label?t.label:"⤢";this.labelNode_="string"==typeof e?document.createTextNode(e):e;const i=void 0!==t.labelActive?t.labelActive:"×";this.labelActiveNode_="string"==typeof i?document.createTextNode(i):i;const n=t.tipLabel?t.tipLabel:"Toggle full-screen";this.button_=document.createElement("button"),this.button_.title=n,this.button_.setAttribute("type","button"),this.button_.appendChild(this.labelNode_),this.button_.addEventListener(x,this.handleClick_.bind(this),!1),this.setClassName_(this.button_,this.isInFullscreen_),this.element.className=`${this.cssClassName_} ${ot} ${lt}`,this.element.appendChild(this.button_)}handleClick_(t){t.preventDefault(),this.handleFullScreen_()}handleFullScreen_(){const t=this.getMap();if(!t)return;const e=t.getOwnerDocument();if(mt(e))if(yt(e))!function(t){t.exitFullscreen?t.exitFullscreen():t.webkitExitFullscreen&&t.webkitExitFullscreen()}(e);else{let i;i=this.source_?"string"==typeof this.source_?e.getElementById(this.source_):this.source_:t.getTargetElement(),this.keys_?function(t){t.webkitRequestFullscreen?t.webkitRequestFullscreen():_t(t)}(i):_t(i)}}handleFullScreenChange_(){const t=this.getMap();if(!t)return;const e=this.isInFullscreen_;this.isInFullscreen_=yt(t.getOwnerDocument()),e!==this.isInFullscreen_&&(this.setClassName_(this.button_,this.isInFullscreen_),this.isInFullscreen_?(J(this.labelActiveNode_,this.labelNode_),this.dispatchEvent(gt)):(J(this.labelNode_,this.labelActiveNode_),this.dispatchEvent(ft)),t.updateSize())}setClassName_(t,e){e?(t.classList.remove(...this.inactiveClassName_),t.classList.add(...this.activeClassName_)):(t.classList.remove(...this.activeClassName_),t.classList.add(...this.inactiveClassName_))}setMap(t){const e=this.getMap();e&&e.removeChangeListener(nt,this.boundHandleMapTargetChange_),super.setMap(t),this.handleMapTargetChange_(),t&&t.addChangeListener(nt,this.boundHandleMapTargetChange_)}handleMapTargetChange_(){const t=this.documentListeners_;for(let e=0,i=t.length;e + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/map/test/theme/img/logo-light.svg b/map/test/theme/img/logo-light.svg new file mode 100644 index 000000000..df941056a --- /dev/null +++ b/map/test/theme/img/logo-light.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/map/test/theme/img/popup.png b/map/test/theme/img/popup.png new file mode 100644 index 0000000000000000000000000000000000000000..e8b15fb156075b060739429849d0da665c0a26a6 GIT binary patch literal 5269 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 ZB%%v+0Ny*?sDD2ri8ctTUZrXk_CJuou$%w@ literal 0 HcmV?d00001 diff --git a/map/test/theme/img/tiled-layers.png b/map/test/theme/img/tiled-layers.png new file mode 100644 index 0000000000000000000000000000000000000000..6026a2a1b046dcd37e8d7a6492c5cee30882805b GIT binary patch literal 6560 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 TqoDsT7l4|Qred|cRpkEwY6O<5 literal 0 HcmV?d00001 diff --git a/map/test/theme/img/timeline.png b/map/test/theme/img/timeline.png new file mode 100644 index 0000000000000000000000000000000000000000..64a9a119dd0f086ebfa1899e31357b1068941546 GIT binary patch literal 2971 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 KOlpi@g#QP#uH%>h literal 0 HcmV?d00001 diff --git a/map/test/theme/img/vector-layers.png b/map/test/theme/img/vector-layers.png new file mode 100644 index 0000000000000000000000000000000000000000..36d08c77c899e79abe7bab271fd86d98a32c8e16 GIT binary patch literal 5108 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 literal 0 HcmV?d00001 diff --git a/map/test/theme/index.css b/map/test/theme/index.css new file mode 100644 index 000000000..cea3f1ff9 --- /dev/null +++ b/map/test/theme/index.css @@ -0,0 +1,50 @@ +#map { + position: relative; + height: 120px; +} + +#map:fullscreen { + height: 100%; +} + +#map:-webkit-full-screen { + height: 100%; + margin: 0; +} + +#tagline { + padding-left: 25%; + margin-bottom: 10px; +} + +#tagline p { + font-size: 150%; + font-style: italic; +} + +#news { + background-color: var(--ol-accent-background-color); + border-radius: 4px; + padding: 1rem 0 0; +} + +#news h1 { + margin: 0; +} + +img.thumb { + float: right; + margin-left: 10px; +} + +/* ol customizations */ + +.ol-overlaycontainer-stopevent { + opacity: 0; + transition: opacity 300ms ease; +} + +/* not done with :hover because the overlay blocks events and has no height */ +.over .ol-overlaycontainer-stopevent { + opacity: 1; +} diff --git a/map/test/theme/ol.css b/map/test/theme/ol.css new file mode 100644 index 000000000..62c2b6123 --- /dev/null +++ b/map/test/theme/ol.css @@ -0,0 +1,350 @@ +:root, +:host { + --ol-background-color: white; + --ol-accent-background-color: #F5F5F5; + --ol-subtle-background-color: rgba(128, 128, 128, 0.25); + --ol-partial-background-color: rgba(255, 255, 255, 0.75); + --ol-foreground-color: #333333; + --ol-subtle-foreground-color: #666666; + --ol-brand-color: #00AAFF; +} + +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 1.5px solid var(--ol-background-color); + background-color: var(--ol-partial-background-color); +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: var(--ol-partial-background-color); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} + +.ol-scale-line-inner { + border: 1px solid var(--ol-subtle-foreground-color); + border-top: none; + color: var(--ol-foreground-color); + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; + transition: all 0.25s; +} + +.ol-scale-bar { + position: absolute; + bottom: 8px; + left: 8px; +} + +.ol-scale-bar-inner { + display: flex; +} + +.ol-scale-step-marker { + width: 1px; + height: 15px; + background-color: var(--ol-foreground-color); + float: right; + z-index: 10; +} + +.ol-scale-step-text { + position: absolute; + bottom: -5px; + font-size: 10px; + z-index: 11; + color: var(--ol-foreground-color); + text-shadow: -1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color); +} + +.ol-scale-text { + position: absolute; + font-size: 12px; + text-align: center; + bottom: 25px; + color: var(--ol-foreground-color); + text-shadow: -1.5px 0 var(--ol-partial-background-color), 0 1.5px var(--ol-partial-background-color), 1.5px 0 var(--ol-partial-background-color), 0 -1.5px var(--ol-partial-background-color); +} + +.ol-scale-singlebar { + position: relative; + height: 10px; + z-index: 9; + box-sizing: border-box; + border: 1px solid var(--ol-foreground-color); +} + +.ol-scale-singlebar-even { + background-color: var(--ol-subtle-foreground-color); +} + +.ol-scale-singlebar-odd { + background-color: var(--ol-background-color); +} + +.ol-unsupported { + display: none; +} + +.ol-viewport, +.ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; +} + +.ol-viewport canvas { + all: unset; + overflow: hidden; +} + +.ol-viewport { + touch-action: pan-x pan-y; +} + +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: text; + -moz-user-select: text; + user-select: text; +} + +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} + +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} + +.ol-control { + position: absolute; + background-color: var(--ol-subtle-background-color); + border-radius: 4px; +} + +.ol-zoom { + top: .5em; + left: .5em; +} + +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} + +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} + +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} + +.ol-full-screen { + right: .5em; + top: .5em; +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: var(--ol-subtle-foreground-color); + font-weight: bold; + text-decoration: none; + font-size: inherit; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: var(--ol-background-color); + border: none; + border-radius: 2px; +} + +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} + +.ol-zoom-extent button { + line-height: 1.4em; +} + +.ol-compass { + display: block; + font-weight: normal; + will-change: transform; +} + +.ol-touch .ol-control button { + font-size: 1.5em; +} + +.ol-touch .ol-zoom-extent { + top: 5.5em; +} + +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + outline: 1px solid var(--ol-subtle-foreground-color); + color: var(--ol-foreground-color); +} + +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} + +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); + display: flex; + flex-flow: row-reverse; + align-items: center; +} + +.ol-attribution a { + color: var(--ol-subtle-foreground-color); + text-decoration: none; +} + +.ol-attribution ul { + margin: 0; + padding: 1px .5em; + color: var(--ol-foreground-color); + text-shadow: 0 0 2px var(--ol-background-color); + font-size: 12px; +} + +.ol-attribution li { + display: inline; + list-style: none; +} + +.ol-attribution li:not(:last-child):after { + content: " "; +} + +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} + +.ol-attribution button { + flex-shrink: 0; +} + +.ol-attribution.ol-collapsed ul { + display: none; +} + +.ol-attribution:not(.ol-collapsed) { + background: var(--ol-partial-background-color); +} + +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; +} + +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} + +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} + +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} + +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} + +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: block; +} + +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid var(--ol-subtle-foreground-color); + height: 150px; + width: 150px; +} + +.ol-overviewmap:not(.ol-collapsed) button { + bottom: 0; + left: 0; + position: absolute; +} + +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} + +.ol-overviewmap:not(.ol-collapsed) { + background: var(--ol-subtle-background-color); +} + +.ol-overviewmap-box { + border: 1.5px dotted var(--ol-subtle-foreground-color); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} diff --git a/map/test/theme/site.css b/map/test/theme/site.css new file mode 100644 index 000000000..66df2e974 --- /dev/null +++ b/map/test/theme/site.css @@ -0,0 +1,531 @@ +@import url(https://fonts.googleapis.com/css?family=Quattrocento+Sans:400,400italic,700); + +body { + font-family: 'Quattrocento Sans', sans-serif; + font-size: 16px; + color: var(--ol-foreground-color); + padding-top: 54px; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-weight: 700 +} + +h1, +.row h1 { + margin-top: 30px; + margin-bottom: 20px; +} + +h1.topic { + font-size: 1.5rem; + color: var(--ol-subtle-foreground-color); + text-transform: uppercase; +} + +code { + color: var(--ol-foreground-color); + background-color: var(--ol-accent-background-color); + padding: 0.2em 0.4em; + border-radius: 3px; +} + +a>code, +pre>code { + color: inherit; + background-color: initial; + padding: initial; + border-radius: initial; +} + +a { + color: var(--ol-brand-color); + text-decoration: none +} + +a :not(:first-child) { + color: var(--ol-foreground-color); +} + +a:hover, +a:focus { + color: var(--ol-brand-color); + text-decoration: underline; +} + +.navbar { + background-color: var(--ol-foreground-color); + color: var(--ol-background-color); + border: 0; + border-radius: 0; +} + +.navbar-brand { + color: var(--ol-background-color); + font-weight: bold; + font-size: 160%; + padding: 8px 0; +} + +.navbar-brand img { + height: 35px; + width: 35px; + vertical-align: middle; + margin-right: 5px; + display: inline-block; +} + +.navbar-dark .navbar-nav .nav-link { + color: var(--ol-background-color); +} + +.navbar-dark .navbar-nav .nav-link:hover { + color: var(--ol-brand-color); +} + +.navbar-brand:focus, +.navbar-brand:hover, +.nav-link:focus, +.nav-link:hover { + text-decoration: none; + color: var(--ol-brand-color); +} + +footer { + background-color: var(--ol-foreground-color); + color: var(--ol-background-color); + margin-top: 40px; + padding: 10px; + text-align: center; +} + +a.dropdown-item { + color: var(--ol-foreground-color); +} + +.dropdown-item.active, +.dropdown-item:hover { + color: var(--ol-brand-color); + text-decoration: none; + background-color: var(--ol-background-color); +} + +.navbar-nav>li>a { + color: var(--ol-background-color); +} + +.display-table { + display: table; +} + +.btn-link { + font-weight: 400; + color: var(--ol-subtle-foreground-color); + text-decoration: none; +} + +.btn-link:hover { + color: var(--ol-brand-color); + text-decoration: none; +} + +.version-form, +.navbar-form { + display: table-cell; + vertical-align: middle; +} + +.version-form { + color: var(--ol-foreground-color); +} + +#title { + margin-top: 1em; +} + +.badge-group { + display: inline-block; +} + +.badge-group>.badge:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.badge-group>.badge:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.badge-info { + background-color: var(--ol-subtle-foreground-color); +} + +a.badge-info:focus, +a.badge-info:hover { + background-color: var(--ol-foreground-color); + color: var(--ol-brand-color); + text-decoration: none; +} + +.tag-modal-toggle { + cursor: pointer; +} + +.modal-tag-example .modal-body { + padding: 0; +} + +.modal-tag-example .list-group-item:focus, +.modal-tag-example .list-group-item:hover, +.modal-tag-example .list-group-item:active { + background-color: var(--ol-background-color); + color: var(--ol-brand-color); +} + +.modal-tag-example .list-group-item.active { + background-color: var(--ol-subtle-foreground-color); + color: var(--ol-background-color); + border: none; +} + +#docs { + margin-top: 1em; +} + +ul.inline, +ol.inline { + margin-left: 0; + padding-left: 0; + list-style: none; +} + +ul.inline>li, +ol.inline>li { + display: inline-block; + padding-left: 5px; + padding-right: 5px; +} + +.map { + height: 400px; + width: 100%; + background: var(--ol-background-color); + margin-bottom: 10px; +} + +.ol-control { + line-height: normal; +} + +.ol-attribution.ol-logo-only, +.ol-attribution.ol-uncollapsible { + max-width: calc(100% - 3em); +} + +.iframe-info iframe { + width: 100%; +} + +.source-heading { + margin-top: 1em; + margin-bottom: 0; + padding-left: .6em; + font-weight: bold; +} + +#tags, +#shortdesc, +.hidden { + display: none; +} + +#api-links ul { + display: inline; +} + +#latest-check { + margin-top: -10px; + margin-bottom: 10px; +} + +/* START PRISM THEME */ + +/** + * VS theme by Andrew Lock (https://andrewlock.net) + * Inspired by Visual Studio syntax coloring + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #393A34; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + font-size: .9em; + line-height: 1.2em; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre>code[class*="language-"] { + font-size: 1em; +} + +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + background: #C1DEF1; +} + +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + background: #C1DEF1; +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; + border: 1px solid #dddddd; + background-color: white; +} + +/* Inline code */ +:not(pre)>code[class*="language-"] { + padding: .2em; + padding-top: 1px; + padding-bottom: 1px; + background: #f8f8f8; + border: 1px solid #dddddd; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #008000; + font-style: italic; +} + +.token.namespace { + opacity: .7; +} + +.token.string { + color: #A31515; +} + +.token.punctuation, +.token.operator { + color: #393A34; + /* no highlight */ +} + +.token.url, +.token.symbol, +.token.number, +.token.boolean, +.token.variable, +.token.constant, +.token.inserted { + color: #36acaa; +} + +.token.atrule, +.token.keyword, +.token.attr-value, +.language-autohotkey .token.selector, +.language-json .token.boolean, +.language-json .token.number, +code[class*="language-css"] { + color: #0000ff; +} + +.token.function { + color: #393A34; +} + +.token.deleted, +.language-autohotkey .token.tag { + color: #9a050f; +} + +.token.selector, +.language-autohotkey .token.keyword { + color: #00009f; +} + +.token.important { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.class-name, +.language-json .token.property { + color: #2B91AF; +} + +.token.tag, +.token.selector { + color: #800000; +} + +.token.attr-name, +.token.property, +.token.regex, +.token.entity { + color: #ff0000; +} + +.token.directive.tag .tag { + background: #ffff00; + color: #393A34; +} + +/* overrides color-values for the Line Numbers plugin + * http://prismjs.com/plugins/line-numbers/ + */ +.line-numbers.line-numbers .line-numbers-rows { + border-right-color: #a5a5a5; +} + +.line-numbers .line-numbers-rows>span:before { + color: #2B91AF; +} + +/* overrides color-values for the Line Highlight plugin + * http://prismjs.com/plugins/line-highlight/ + */ +.line-highlight.line-highlight { + background: rgba(193, 222, 241, 0.2); + background: -webkit-linear-gradient(left, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0)); + background: linear-gradient(to right, rgba(193, 222, 241, 0.2) 70%, rgba(221, 222, 241, 0)); +} + +/* END PRISM THEME */ + +/* restyle prism copy button */ +div.code-toolbar { + position: relative; +} + +div.code-toolbar>.toolbar { + opacity: 0; + position: absolute; + right: 0; + top: 0; + transition: opacity .2s ease-in-out; +} + +div.code-toolbar:hover>.toolbar, +div.code-toolbar:focus-within>.toolbar { + opacity: 1; +} + +div.code-toolbar>.toolbar button { + font-size: 16px; + color: var(--ol-subtle-foreground-color); + background-color: transparent; + box-shadow: none; + padding: .615rem .75rem; + border: none; +} + +div.code-toolbar>.toolbar button:hover, +div.code-toolbar>.toolbar button:focus { + color: var(--ol-brand-color); +} + +div.code-toolbar>.toolbar button:focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25); +} + +div.code-toolbar>.toolbar button { + background-color: rgba(255, 255, 255, .625); + border-radius: 0 0 0 10px; + margin: 1px; +} +div.code-toolbar>.toolbar button:before { + font: var(--fa-font-solid); + font-size: 1.33333333em; + line-height: .75em; + content: "\f0ea"; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + margin-right: .184em; + vertical-align: middle; +} + +/* jarguar overrides for jsdoc */ +.navigation { + background-color: var(--ol-foreground-color); + color: var(--ol-background-color); +} + +.navigation li.item .subtitle { + color: var(--ol-background-color); +} + +.navigation li.item a:hover, +.navigation li.item .title a:hover { + color: var(--ol-brand-color); +} + +.main .subsection-title { + color: var(--ol-foreground-color); +} + +.main .nameContainer, +.main .nameContainer.inherited { + border-top-color: var(--ol-subtle-foreground-color); + color: var(--ol-foreground-color); +} + +.nameContainer .anchor:target+h4 { + background-color: inherit; +} + +@media (min-width: 1400px) { + .container { + max-width: 1140px; + } +} + +table.featureInfo { + caption-side: initial; +} diff --git a/map/test2/apikey b/map/test2/apikey new file mode 100644 index 000000000..ba93b7d3d --- /dev/null +++ b/map/test2/apikey @@ -0,0 +1 @@ +yBwA37PS2BsXxx7WM9Rr \ No newline at end of file diff --git a/map/test2/index.html b/map/test2/index.html new file mode 100644 index 000000000..022777581 --- /dev/null +++ b/map/test2/index.html @@ -0,0 +1,12 @@ + + + + + + Quick Start + + +
+ + + diff --git a/map/test2/main.js b/map/test2/main.js new file mode 100644 index 000000000..9f0e5dd47 --- /dev/null +++ b/map/test2/main.js @@ -0,0 +1,18 @@ +import './style.css'; +import Map from '/javascript/ol/Map.js'; +import OSM from '/javascript/ol/source/OSM.js'; +import TileLayer from '/javascript/ol/layer/Tile.js'; +import View from '/javascript/ol/View.js'; + +const map = new Map({ + target: 'map', + layers: [ + new TileLayer({ + source: new OSM(), + }), + ], + view: new View({ + center: [0, 0], + zoom: 2, + }), +}); diff --git a/map/test2/style.css b/map/test2/style.css new file mode 100644 index 000000000..4295e59d8 --- /dev/null +++ b/map/test2/style.css @@ -0,0 +1,14 @@ +@import "/javascript/ol/ol.css"; + +html, +body { + margin: 0; + height: 100%; +} + +#map { + position: absolute; + top: 0; + bottom: 0; + width: 100%; +}