jupytergis-core 0.0.0__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- jupytergis_core-0.1.2/.gitignore +2 -0
- jupytergis_core-0.1.2/LICENSE +29 -0
- jupytergis_core-0.1.2/PKG-INFO +58 -0
- jupytergis_core-0.1.2/README.md +1 -0
- jupytergis_core-0.1.2/extension.webpack.config.js +52 -0
- jupytergis_core-0.1.2/jupyter-config/server-config/jupytergis_core.json +7 -0
- jupytergis_core-0.1.2/jupytergis_core/__init__.py +30 -0
- jupytergis_core-0.1.2/jupytergis_core/_version.py +4 -0
- jupytergis_core-0.1.2/jupytergis_core/handler.py +36 -0
- jupytergis_core-0.1.2/jupytergis_core/jgis_ydoc.py +88 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/package.json +127 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/034e72037478aea1bd04.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/062a9554f6b4caac9713.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/064f37cecb8130ad66e8.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/08da2741746ddab81d04.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/133e1e6bde583ffd3c7f.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/14663f6f94a681c2dd34.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/154.0d16fbe1d1182d138b2c.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/197.34d9096e78e2f4b7138c.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/1d440270da19a2f22fee.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/226.280aa14a2e4c0654c374.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/27.aea9e291ba3dd16790fb.js +2 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/27.aea9e291ba3dd16790fb.js.LICENSE.txt +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/2b3d42a470b5ce14859a.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/321f7b5be7e95b460424.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/32c7a73662cceb5bb1d7.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/36.b2f6adaa2d1def5c163f.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/363ca7c5f78deb6fd033.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/366.33cb40029b4f4da3d3ad.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/3d48be10ffea86eb15de.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/407.fa2f7a0dc4d3371a5e2c.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/40979e6992658959dda5.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/432.19e693d578a221132366.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/460.a2074380632031c05e8d.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/472.08add5249d72d563ba32.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/4d79d4897dde805afe9a.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/4ed4ae4121d38d85100b.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/509.0d58394cd3a34bdbd0b9.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/542.3038c6cef679f15b8d9a.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/552.9f37fbb73d9f60b6c3f3.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/555.7d0c1d2ee9e49a619cb9.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/557.fe291f5575a15c36d24c.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/562.d2f8b4a53b1ad1be7340.js +2 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/562.d2f8b4a53b1ad1be7340.js.LICENSE.txt +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/57.8ce6aece8bd9c15fc04d.js +8 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/57.8ce6aece8bd9c15fc04d.js.LICENSE.txt +17 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/584554f9022828d7a1b8.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/5bc61551c2df0b1aade1.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/618.86523276f857e0a3362e.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/733.9bce9fdd113869d413d0.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/777.b41e81dd6b0af001baab.js +2 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/777.b41e81dd6b0af001baab.js.LICENSE.txt +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/803.959deb5eafbb3ab489c6.js +7 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/824284c13adc5a19131d.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/8961d9e4d52977359c75.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/991.134d58f78794cb146007.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/9dcfae50c2cc25352c8e.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/9ed013096549f2bf7c22.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/a58edff3ad1e405ced23.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/aa0d1282df07ef3c385f.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/ae2589dc6f6090080a25.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/bf9c5537f242b3244cfd.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/c619fdbfe0db16976fd2.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/c8e0561afe30ff550fa8.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/cbd2efc168455e099474.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/d0917c2edc1eee1562a2.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/d7eb57ad53f788b1fa92.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/d83457b1b925c1718f6d.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/dc7cea97d06a8a3d2814.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/ea40eb5ee5dd98108db6.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/ea9b4d214b10e8e5d4f8.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/ec0583b2c592f27c6663.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/ed9da7a9926094c6dbb1.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/f79363cb598845f042fc.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/fb92ae29638fa5fac75b.png +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/gdal3WebAssembly.data +97604 -44
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/gdal3WebAssembly.wasm +0 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/remoteEntry.be92040aa59f841e6700.js +1 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/style.js +4 -0
- jupytergis_core-0.1.2/jupytergis_core/labextension/static/third-party-licenses.json +406 -0
- jupytergis_core-0.1.2/lib/externalcommand.d.ts +7 -0
- jupytergis_core-0.1.2/lib/externalcommand.js +11 -0
- jupytergis_core-0.1.2/lib/factory.d.ts +37 -0
- jupytergis_core-0.1.2/lib/factory.js +57 -0
- jupytergis_core-0.1.2/lib/index.d.ts +3 -0
- jupytergis_core-0.1.2/lib/index.js +10 -0
- jupytergis_core-0.1.2/lib/jgisplugin/modelfactory.d.ts +54 -0
- jupytergis_core-0.1.2/lib/jgisplugin/modelfactory.js +72 -0
- jupytergis_core-0.1.2/lib/jgisplugin/plugins.d.ts +3 -0
- jupytergis_core-0.1.2/lib/jgisplugin/plugins.js +182 -0
- jupytergis_core-0.1.2/lib/layerBrowserRegistry.d.ts +32 -0
- jupytergis_core-0.1.2/lib/layerBrowserRegistry.js +40 -0
- jupytergis_core-0.1.2/lib/plugin.d.ts +6 -0
- jupytergis_core-0.1.2/lib/plugin.js +53 -0
- jupytergis_core-0.1.2/lib/schemaregistry.d.ts +8 -0
- jupytergis_core-0.1.2/lib/schemaregistry.js +20 -0
- jupytergis_core-0.1.2/package.json +122 -0
- jupytergis_core-0.1.2/pyproject.toml +82 -0
- jupytergis_core-0.1.2/scripts/bump-version.py +14 -0
- jupytergis_core-0.1.2/setup.py +1 -0
- jupytergis_core-0.1.2/src/externalcommand.ts +22 -0
- jupytergis_core-0.1.2/src/factory.ts +87 -0
- jupytergis_core-0.1.2/src/index.ts +16 -0
- jupytergis_core-0.1.2/src/jgisplugin/modelfactory.ts +85 -0
- jupytergis_core-0.1.2/src/jgisplugin/plugins.ts +252 -0
- jupytergis_core-0.1.2/src/layerBrowserRegistry.ts +53 -0
- jupytergis_core-0.1.2/src/plugin.ts +81 -0
- jupytergis_core-0.1.2/src/schemaregistry.ts +26 -0
- jupytergis_core-0.1.2/style/base.css +5 -0
- jupytergis_core-0.1.2/style/index.css +1 -0
- jupytergis_core-0.1.2/style/index.js +1 -0
- jupytergis_core-0.1.2/tsconfig.json +8 -0
- jupytergis_core-0.1.2/tsconfig.tsbuildinfo +1 -0
- jupytergis_core-0.0.0/PKG-INFO +0 -3
- jupytergis_core-0.0.0/jupytergis.egg-info/PKG-INFO +0 -3
- jupytergis_core-0.0.0/jupytergis.egg-info/SOURCES.txt +0 -5
- jupytergis_core-0.0.0/jupytergis.egg-info/dependency_links.txt +0 -1
- jupytergis_core-0.0.0/jupytergis.egg-info/top_level.txt +0 -1
- jupytergis_core-0.0.0/setup.cfg +0 -4
- jupytergis_core-0.0.0/setup.py +0 -3
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2023, JupyterGIS contributors
|
|
4
|
+
All rights reserved.
|
|
5
|
+
|
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
|
8
|
+
|
|
9
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
list of conditions and the following disclaimer.
|
|
11
|
+
|
|
12
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
and/or other materials provided with the distribution.
|
|
15
|
+
|
|
16
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
17
|
+
contributors may be used to endorse or promote products derived from
|
|
18
|
+
this software without specific prior written permission.
|
|
19
|
+
|
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
23
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
26
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
27
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
28
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: jupytergis_core
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Dynamic: Keywords
|
|
5
|
+
Summary: JupyterGIS core extension
|
|
6
|
+
Project-URL: Homepage, https://github.com/geojupyter/jupytergis
|
|
7
|
+
Project-URL: Bug Tracker, https://github.com/geojupyter/jupytergis/issues
|
|
8
|
+
Project-URL: Repository, https://github.com/geojupyter/jupytergis.git
|
|
9
|
+
Author: JupyterGIS contributors
|
|
10
|
+
License: BSD 3-Clause License
|
|
11
|
+
|
|
12
|
+
Copyright (c) 2023, JupyterGIS contributors
|
|
13
|
+
All rights reserved.
|
|
14
|
+
|
|
15
|
+
Redistribution and use in source and binary forms, with or without
|
|
16
|
+
modification, are permitted provided that the following conditions are met:
|
|
17
|
+
|
|
18
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
19
|
+
list of conditions and the following disclaimer.
|
|
20
|
+
|
|
21
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
22
|
+
this list of conditions and the following disclaimer in the documentation
|
|
23
|
+
and/or other materials provided with the distribution.
|
|
24
|
+
|
|
25
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
26
|
+
contributors may be used to endorse or promote products derived from
|
|
27
|
+
this software without specific prior written permission.
|
|
28
|
+
|
|
29
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
30
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
31
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
32
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
33
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
34
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
35
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
36
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
37
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
38
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
39
|
+
License-File: LICENSE
|
|
40
|
+
Classifier: Framework :: Jupyter
|
|
41
|
+
Classifier: Framework :: Jupyter :: JupyterLab
|
|
42
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: 4
|
|
43
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: Extensions
|
|
44
|
+
Classifier: Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt
|
|
45
|
+
Classifier: License :: OSI Approved :: BSD License
|
|
46
|
+
Classifier: Programming Language :: Python
|
|
47
|
+
Classifier: Programming Language :: Python :: 3
|
|
48
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
49
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
50
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
51
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
52
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
53
|
+
Requires-Python: >=3.8
|
|
54
|
+
Requires-Dist: jupyter-collaboration<3,>=2
|
|
55
|
+
Requires-Dist: jupyter-ydoc<3,>=2
|
|
56
|
+
Description-Content-Type: text/markdown
|
|
57
|
+
|
|
58
|
+
# JupyterGIS Core package
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# JupyterGIS Core package
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const CopyPlugin = require('copy-webpack-plugin');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
const wasmPath = [
|
|
5
|
+
__dirname,
|
|
6
|
+
'../',
|
|
7
|
+
'../',
|
|
8
|
+
'node_modules',
|
|
9
|
+
'gdal3.js',
|
|
10
|
+
'dist',
|
|
11
|
+
'package',
|
|
12
|
+
'gdal3WebAssembly.wasm'
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
const dataPath = [
|
|
16
|
+
__dirname,
|
|
17
|
+
'../',
|
|
18
|
+
'../',
|
|
19
|
+
'node_modules',
|
|
20
|
+
'gdal3.js',
|
|
21
|
+
'dist',
|
|
22
|
+
'package',
|
|
23
|
+
'gdal3WebAssembly.data'
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
const staticWasm = [
|
|
27
|
+
__dirname,
|
|
28
|
+
'jupytergis_core',
|
|
29
|
+
'labextension',
|
|
30
|
+
'static',
|
|
31
|
+
'[name].wasm'
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const staticData = [
|
|
35
|
+
__dirname,
|
|
36
|
+
'jupytergis_core',
|
|
37
|
+
'labextension',
|
|
38
|
+
'static',
|
|
39
|
+
'[name].data'
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
module.exports = {
|
|
43
|
+
plugins: [
|
|
44
|
+
new CopyPlugin({
|
|
45
|
+
patterns: [
|
|
46
|
+
{ from: path.join(...wasmPath), to: path.join(...staticWasm) },
|
|
47
|
+
{ from: path.join(...dataPath), to: path.join(...staticData) },
|
|
48
|
+
|
|
49
|
+
]
|
|
50
|
+
})
|
|
51
|
+
]
|
|
52
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
try:
|
|
2
|
+
from ._version import __version__
|
|
3
|
+
except ImportError:
|
|
4
|
+
# Fallback when using the package in dev mode without installing
|
|
5
|
+
# in editable mode with pip. It is highly recommended to install
|
|
6
|
+
# the package from a stable release or in editable mode: https://pip.pypa.io/en/stable/topics/local-project-installs/#editable-installs
|
|
7
|
+
import warnings
|
|
8
|
+
|
|
9
|
+
warnings.warn("Importing 'jupytergis_core' outside a proper installation.")
|
|
10
|
+
__version__ = "dev"
|
|
11
|
+
|
|
12
|
+
from .handler import setup_handlers
|
|
13
|
+
|
|
14
|
+
def _jupyter_labextension_paths():
|
|
15
|
+
return [{"src": "labextension", "dest": "@jupytergis/jupytergis-core"}]
|
|
16
|
+
|
|
17
|
+
def _jupyter_server_extension_points():
|
|
18
|
+
return [{"module": "jupytergis_core"}]
|
|
19
|
+
|
|
20
|
+
def _load_jupyter_server_extension(server_app):
|
|
21
|
+
"""Registers the API handler to receive HTTP requests from the frontend extension.
|
|
22
|
+
|
|
23
|
+
Parameters
|
|
24
|
+
----------
|
|
25
|
+
server_app: jupyterlab.labapp.LabApp
|
|
26
|
+
JupyterLab application instance
|
|
27
|
+
"""
|
|
28
|
+
setup_handlers(server_app.web_app)
|
|
29
|
+
name = "jupytergis_core"
|
|
30
|
+
print(f"Registered {name} server extension")
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
from jupyter_server.base.handlers import APIHandler
|
|
2
|
+
from jupyter_server.utils import url_path_join
|
|
3
|
+
import tornado
|
|
4
|
+
import requests
|
|
5
|
+
|
|
6
|
+
class ProxyHandler(APIHandler):
|
|
7
|
+
@tornado.web.authenticated
|
|
8
|
+
def get(self):
|
|
9
|
+
url = self.get_argument('url')
|
|
10
|
+
print(f"Proxy request received for: {url}")
|
|
11
|
+
try:
|
|
12
|
+
response = requests.get(url)
|
|
13
|
+
response.raise_for_status()
|
|
14
|
+
|
|
15
|
+
self.set_header("Access-Control-Allow-Origin", "*")
|
|
16
|
+
self.set_header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
|
|
17
|
+
self.set_header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Authorization")
|
|
18
|
+
|
|
19
|
+
self.set_header('Content-Type', response.headers['Content-Type'])
|
|
20
|
+
|
|
21
|
+
self.finish(response.content)
|
|
22
|
+
except requests.exceptions.RequestException as e:
|
|
23
|
+
self.set_status(500)
|
|
24
|
+
self.finish(str(e))
|
|
25
|
+
|
|
26
|
+
def setup_handlers(web_app):
|
|
27
|
+
host_pattern = ".*$"
|
|
28
|
+
|
|
29
|
+
base_url = web_app.settings["base_url"]
|
|
30
|
+
proxy_route_pattern = url_path_join(base_url, "jupytergis_core", "proxy")
|
|
31
|
+
|
|
32
|
+
print(f"Setting up proxy handler at: {proxy_route_pattern}")
|
|
33
|
+
handlers = [
|
|
34
|
+
(proxy_route_pattern, ProxyHandler)
|
|
35
|
+
]
|
|
36
|
+
web_app.add_handlers(host_pattern, handlers)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import json
|
|
2
|
+
from typing import Any, Callable
|
|
3
|
+
from functools import partial
|
|
4
|
+
|
|
5
|
+
from pycrdt import Array, Map
|
|
6
|
+
from jupyter_ydoc.ybasedoc import YBaseDoc
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class YJGIS(YBaseDoc):
|
|
10
|
+
def __init__(self, *args, **kwargs):
|
|
11
|
+
super().__init__(*args, **kwargs)
|
|
12
|
+
self._ydoc["layers"] = self._ylayers = Map()
|
|
13
|
+
self._ydoc["sources"] = self._ysources = Map()
|
|
14
|
+
self._ydoc["options"] = self._yoptions = Map()
|
|
15
|
+
self._ydoc["layerTree"] = self._ylayerTree = Array()
|
|
16
|
+
self._ydoc["terrain"] = self._yterrain = Map()
|
|
17
|
+
|
|
18
|
+
def version(self) -> str:
|
|
19
|
+
return "0.1.0"
|
|
20
|
+
|
|
21
|
+
def get(self) -> str:
|
|
22
|
+
"""
|
|
23
|
+
Returns the content of the document.
|
|
24
|
+
:return: Document's content.
|
|
25
|
+
:rtype: Any
|
|
26
|
+
"""
|
|
27
|
+
layers = self._ylayers.to_py()
|
|
28
|
+
sources = self._ysources.to_py()
|
|
29
|
+
options = self._yoptions.to_py()
|
|
30
|
+
layers_tree = self._ylayerTree.to_py()
|
|
31
|
+
terrain = self._yterrain.to_py()
|
|
32
|
+
return json.dumps(
|
|
33
|
+
dict(
|
|
34
|
+
layers=layers,
|
|
35
|
+
sources=sources,
|
|
36
|
+
options=options,
|
|
37
|
+
layerTree=layers_tree,
|
|
38
|
+
terrain=terrain,
|
|
39
|
+
),
|
|
40
|
+
sort_keys=True,
|
|
41
|
+
indent=2,
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
def set(self, value: str) -> None:
|
|
45
|
+
"""
|
|
46
|
+
Sets the content of the document.
|
|
47
|
+
:param value: The content of the document.
|
|
48
|
+
:type value: Any
|
|
49
|
+
"""
|
|
50
|
+
valueDict = json.loads(value)
|
|
51
|
+
|
|
52
|
+
with self._ydoc.transaction():
|
|
53
|
+
self._ylayers.clear()
|
|
54
|
+
self._ylayers.update(valueDict.get("layers", {}))
|
|
55
|
+
|
|
56
|
+
self._ysources.clear()
|
|
57
|
+
self._ysources.update(valueDict.get("sources", {}))
|
|
58
|
+
|
|
59
|
+
self._yoptions.clear()
|
|
60
|
+
self._yoptions.update(valueDict.get("options", {}))
|
|
61
|
+
|
|
62
|
+
self._ylayerTree.clear()
|
|
63
|
+
self._ylayerTree.extend(valueDict.get("layerTree", []))
|
|
64
|
+
|
|
65
|
+
self._yterrain.clear()
|
|
66
|
+
self._yterrain.update(valueDict.get("terrain", {}))
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def observe(self, callback: Callable[[str, Any], None]):
|
|
70
|
+
self.unobserve()
|
|
71
|
+
self._subscriptions[self._ystate] = self._ystate.observe(
|
|
72
|
+
partial(callback, "state")
|
|
73
|
+
)
|
|
74
|
+
self._subscriptions[self._ylayers] = self._ylayers.observe_deep(
|
|
75
|
+
partial(callback, "layers")
|
|
76
|
+
)
|
|
77
|
+
self._subscriptions[self._ysources] = self._ysources.observe_deep(
|
|
78
|
+
partial(callback, "sources")
|
|
79
|
+
)
|
|
80
|
+
self._subscriptions[self._yoptions] = self._yoptions.observe_deep(
|
|
81
|
+
partial(callback, "options")
|
|
82
|
+
)
|
|
83
|
+
self._subscriptions[self._ylayerTree] = self._ylayerTree.observe(
|
|
84
|
+
partial(callback, "layerTree")
|
|
85
|
+
)
|
|
86
|
+
self._subscriptions[self._yterrain] = self._yterrain.observe_deep(
|
|
87
|
+
partial(callback, "terrain")
|
|
88
|
+
)
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jupytergis/jupytergis-core",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "JupyterGIS core extension",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"jupyter",
|
|
7
|
+
"jupyterlab",
|
|
8
|
+
"jupyterlab-extension"
|
|
9
|
+
],
|
|
10
|
+
"homepage": "https://github.com/geojupyter/jupytergis",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/geojupyter/jupytergis/issues"
|
|
13
|
+
},
|
|
14
|
+
"license": "BSD-3-Clause",
|
|
15
|
+
"author": "JupyterGIS contributors",
|
|
16
|
+
"files": [
|
|
17
|
+
"lib/**/*.{d.ts,eot,gif,html,jpg,js,js.map,json,png,svg,woff2,ttf}",
|
|
18
|
+
"style/**/*.{css,js,eot,gif,html,jpg,json,png,svg,woff2,ttf}"
|
|
19
|
+
],
|
|
20
|
+
"main": "lib/index.js",
|
|
21
|
+
"types": "lib/index.d.ts",
|
|
22
|
+
"style": "style/index.css",
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/geojupyter/jupytergis.git"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "jlpm build:lib && jlpm build:labextension:dev",
|
|
29
|
+
"build:prod": "jlpm clean && jlpm build:lib:prod && jlpm build:labextension",
|
|
30
|
+
"build:labextension": "jupyter labextension build .",
|
|
31
|
+
"build:labextension:dev": "jupyter labextension build --development True .",
|
|
32
|
+
"build:lib": "tsc --sourceMap",
|
|
33
|
+
"build:lib:prod": "tsc",
|
|
34
|
+
"build:dev": "jlpm run build",
|
|
35
|
+
"clean": "jlpm clean:lib",
|
|
36
|
+
"clean:lib": "rimraf lib tsconfig.tsbuildinfo",
|
|
37
|
+
"clean:lintcache": "rimraf .eslintcache .stylelintcache",
|
|
38
|
+
"clean:labextension": "rimraf jupytergis_core/labextension jupytergis_core/_version.py",
|
|
39
|
+
"clean:all": "jlpm clean:lib && jlpm clean:labextension && jlpm clean:lintcache",
|
|
40
|
+
"eslint": "jlpm eslint:check --fix",
|
|
41
|
+
"eslint:check": "eslint . --cache --ext .ts,.tsx",
|
|
42
|
+
"install:extension": "jlpm build",
|
|
43
|
+
"lint": "jlpm stylelint && jlpm prettier && jlpm eslint",
|
|
44
|
+
"lint:check": "jlpm stylelint:check && jlpm prettier:check && jlpm eslint:check",
|
|
45
|
+
"prettier": "jlpm prettier:base --write",
|
|
46
|
+
"prettier:base": "prettier \"**/*{.ts,.tsx,.js,.jsx,.css,.json,.md}\"",
|
|
47
|
+
"prettier:check": "jlpm prettier:base --check",
|
|
48
|
+
"stylelint": "jlpm stylelint:check --fix",
|
|
49
|
+
"stylelint:check": "stylelint --cache \"style/**/*.css\"",
|
|
50
|
+
"watch": "run-p watch:src watch:labextension",
|
|
51
|
+
"watch:src": "tsc -w --sourceMap",
|
|
52
|
+
"watch:labextension": "jupyter labextension watch ."
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@jupyter/docprovider": "^2.0.0",
|
|
56
|
+
"@jupytergis/base": "^0.1.2",
|
|
57
|
+
"@jupytergis/schema": "^0.1.2",
|
|
58
|
+
"@jupyterlab/application": "^4.0.0",
|
|
59
|
+
"@jupyterlab/apputils": "^4.0.0",
|
|
60
|
+
"@jupyterlab/docregistry": "^4.0.0",
|
|
61
|
+
"@jupyterlab/filebrowser": "^4.0.0",
|
|
62
|
+
"@jupyterlab/launcher": "^4.0.0",
|
|
63
|
+
"@jupyterlab/mainmenu": "^4.0.0",
|
|
64
|
+
"@jupyterlab/services": "^7.0.0",
|
|
65
|
+
"@jupyterlab/translation": "^4.0.0",
|
|
66
|
+
"@jupyterlab/ui-components": "^4.0.0",
|
|
67
|
+
"@lumino/commands": "^2.0.0",
|
|
68
|
+
"util": "^0.12.5"
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@jupyterlab/builder": "^4.0.0",
|
|
72
|
+
"@types/json-schema": "^7.0.11",
|
|
73
|
+
"@types/react": "^18.0.26",
|
|
74
|
+
"@types/react-addons-linked-state-mixin": "^0.14.22",
|
|
75
|
+
"copy-webpack-plugin": "^10.0.0",
|
|
76
|
+
"css-loader": "^6.7.1",
|
|
77
|
+
"mkdirp": "^1.0.3",
|
|
78
|
+
"npm-run-all": "^4.1.5",
|
|
79
|
+
"rimraf": "^3.0.2",
|
|
80
|
+
"style-loader": "^3.3.1",
|
|
81
|
+
"typescript": "^5",
|
|
82
|
+
"webpack": "^5.76.3",
|
|
83
|
+
"yjs": "^13.5.0"
|
|
84
|
+
},
|
|
85
|
+
"sideEffects": [
|
|
86
|
+
"style/*.css",
|
|
87
|
+
"style/index.js"
|
|
88
|
+
],
|
|
89
|
+
"styleModule": "style/index.js",
|
|
90
|
+
"publishConfig": {
|
|
91
|
+
"access": "public"
|
|
92
|
+
},
|
|
93
|
+
"jupyterlab": {
|
|
94
|
+
"discovery": {
|
|
95
|
+
"server": {
|
|
96
|
+
"managers": [
|
|
97
|
+
"pip"
|
|
98
|
+
],
|
|
99
|
+
"base": {
|
|
100
|
+
"name": "jupytergis_core"
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"extension": true,
|
|
105
|
+
"outputDir": "jupytergis_core/labextension",
|
|
106
|
+
"webpackConfig": "./extension.webpack.config.js",
|
|
107
|
+
"sharedPackages": {
|
|
108
|
+
"@jupytergis/base": {
|
|
109
|
+
"singleton": true,
|
|
110
|
+
"bundled": true
|
|
111
|
+
},
|
|
112
|
+
"@jupytergis/schema": {
|
|
113
|
+
"singleton": true,
|
|
114
|
+
"bundled": true
|
|
115
|
+
},
|
|
116
|
+
"@jupyter/docprovider": {
|
|
117
|
+
"singleton": true,
|
|
118
|
+
"bundled": false
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"_build": {
|
|
122
|
+
"load": "static/remoteEntry.be92040aa59f841e6700.js",
|
|
123
|
+
"extension": "./extension",
|
|
124
|
+
"style": "./style"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_jupytergis_jupytergis_core=self.webpackChunk_jupytergis_jupytergis_core||[]).push([[154],{74660:(e,t,r)=>{function n(e,t){let r=e.length-t,n=0;do{for(let r=t;r>0;r--)e[n+t]+=e[n],n++;r-=t}while(r>0)}function o(e,t,r){let n=0,o=e.length;const i=o/r;for(;o>t;){for(let r=t;r>0;--r)e[n+t]+=e[n],++n;o-=t}const s=e.slice();for(let t=0;t<i;++t)for(let n=0;n<r;++n)e[r*t+n]=s[(r-n-1)*i+t]}r.d(t,{A:()=>i});class i{async decode(e,t){const r=await this.decodeBlock(t),i=e.Predictor||1;if(1!==i){const t=!e.StripOffsets;return function(e,t,r,i,s,l){if(!t||1===t)return e;for(let e=0;e<s.length;++e){if(s[e]%8!=0)throw new Error("When decoding with predictor, only multiple of 8 bits are supported.");if(s[e]!==s[0])throw new Error("When decoding with predictor, all samples must have the same size.")}const c=s[0]/8,f=2===l?1:s.length;for(let l=0;l<i&&!(l*f*r*c>=e.byteLength);++l){let i;if(2===t){switch(s[0]){case 8:i=new Uint8Array(e,l*f*r*c,f*r*c);break;case 16:i=new Uint16Array(e,l*f*r*c,f*r*c/2);break;case 32:i=new Uint32Array(e,l*f*r*c,f*r*c/4);break;default:throw new Error(`Predictor 2 not allowed with ${s[0]} bits per sample.`)}n(i,f)}else 3===t&&(i=new Uint8Array(e,l*f*r*c,f*r*c),o(i,f,c))}return e}(r,i,t?e.TileWidth:e.ImageWidth,t?e.TileLength:e.RowsPerStrip||e.ImageLength,e.BitsPerSample,e.PlanarConfiguration)}return r}}},87154:(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r(74660);function o(e,t){for(let r=t.length-1;r>=0;r--)e.push(t[r]);return e}class i extends n.A{decodeBlock(e){return function(e){const t=new Uint16Array(4093),r=new Uint8Array(4093);for(let e=0;e<=257;e++)t[e]=4096,r[e]=e;let n=258,i=9,s=0;function l(){n=258,i=9}function c(e){const t=function(e,t,r){const n=t%8,o=Math.floor(t/8),i=8-n,s=t+r-8*(o+1);let l=8*(o+2)-(t+r);const c=8*(o+2)-t;if(l=Math.max(0,l),o>=e.length)return console.warn("ran off the end of the buffer before finding EOI_CODE (end on input code)"),257;let f=e[o]&2**(8-n)-1;f<<=r-i;let a=f;if(o+1<e.length){let t=e[o+1]>>>l;t<<=Math.max(0,r-c),a+=t}if(s>8&&o+2<e.length){const n=8*(o+3)-(t+r);a+=e[o+2]>>>n}return a}(e,s,i);return s+=i,t}function f(e,o){return r[n]=o,t[n]=e,n++,n-1}function a(e){const n=[];for(let o=e;4096!==o;o=t[o])n.push(r[o]);return n}const u=[];l();const h=new Uint8Array(e);let d,w=c(h);for(;257!==w;){if(256===w){for(l(),w=c(h);256===w;)w=c(h);if(257===w)break;if(w>256)throw new Error(`corrupted code at scanline ${w}`);o(u,a(w)),d=w}else if(w<n){const e=a(w);o(u,e),f(d,e[e.length-1]),d=w}else{const e=a(d);if(!e)throw new Error(`Bogus entry. Not in dictionary, ${d} / ${n}, position: ${s}`);o(u,e),u.push(e[e.length-1]),f(d,e[e.length-1]),d=w}n+1>=2**i&&(12===i?d=void 0:i++),w=c(h)}return new Uint8Array(u)}(e).buffer}}}}]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_jupytergis_jupytergis_core=self.webpackChunk_jupytergis_jupytergis_core||[]).push([[197],{9197:(e,t,i)=>{i.r(t),i.d(t,{makeJSONObjectField:()=>n});var r=i(93345),s=i(72192),a=i(28036),o=i(67262);function n(e){return class extends e{constructor(){super(...arguments),this.onReset=()=>{this._editor.getDoc().setValue(JSON.stringify(this.props.formData,null,2))},this.onSave=()=>{this.props.onChange(this.state.editorValue)},this.onChange=(e,t,i)=>{try{const e=JSON.parse(i);this.setState({editorValue:e,editorError:!1})}catch(e){this.setState({editorValue:null,editorError:!0})}}}render(){const{uiSchema:e,formData:t,idSchema:i,name:o,registry:n=s.W.getDefaultRegistry()}=this.props,{definitions:l}=n,c=s.W.retrieveSchema(this.props.schema,l,t);let d;d=this.state.wasPropertyKeyModified||void 0===c.title?o:c.title;const u=!!document.querySelector('body[data-jp-theme-light="true"]'),h=e["ui:description"]||c.description,{canSave:m}=this,p={mode:"application/json",theme:u?"default":"zenburn",matchBrackets:!0,autoCloseBrackets:!0};return r.createElement(r.Fragment,null,r.createElement("legend",null,d),r.createElement("p",{className:"field-description"},h),r.createElement("div",{className:"jp-SchemaForm-JSONObject-buttons"},r.createElement("button",{id:`${i.$id}_revert`,className:"jp-JSONEditor-revertButton",title:"Revert to Previous Notebook Metadata",onClick:this.onReset}),r.createElement("button",{id:`${i.$id}_commit`,disabled:!m,className:"jp-JSONEditor-commitButton",title:"Commit to Notebook Metadata",onClick:this.onSave})),r.createElement("div",{id:i.$id},r.createElement(a.wN,{editorDidMount:e=>this._editor=e,value:JSON.stringify(t,null,2),options:p,onChange:this.onChange})))}get canSave(){return!this.state.editorError&&this.state.editorValue&&!o.JSONExt.deepEqual(this.state.editorValue,this.props.formData)}}}}}]);
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_jupytergis_jupytergis_core=self.webpackChunk_jupytergis_jupytergis_core||[]).push([[226],{85226:(e,t,r)=>{r.r(t),r.d(t,{CodeMirrorField:()=>o,codeMirrorDefaults:()=>a});var n=r(93345),u=r(28036);function o(e){const{options:t}=e,r=Object.assign(Object.assign({},a()),(null==t?void 0:t.cmOptions)||{});return n.createElement(n.Fragment,null,n.createElement("div",null,n.createElement(u.wN,{value:e.value,options:r,onChange:(t,r,n)=>{e.onChange(n)},autoCursor:!1,autoScroll:!1})))}function a(){return{theme:document.querySelector('body[data-jp-theme-light="true"]')?"default":"zenburn",matchBrackets:!0,autoCloseBrackets:!0,lineWrapping:!0}}}}]);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! For license information please see 27.aea9e291ba3dd16790fb.js.LICENSE.txt */
|
|
2
|
+
(self.webpackChunk_jupytergis_jupytergis_core=self.webpackChunk_jupytergis_jupytergis_core||[]).push([[27],{71027:(A,I,g)=>{"use strict";g.r(I),g.d(I,{default:()=>D,zstd:()=>r});var B=g(67341),Q=g(92322),C=g.n(Q);let E,i,e;const a={env:{emscripten_notify_memory_growth:function(A){e=new Uint8Array(i.exports.memory.buffer)}}},o="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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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";var t=g(74660),s=g(74244);const r=new class{init(){return E||(E="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+o).then((A=>A.arrayBuffer())).then((A=>WebAssembly.instantiate(A,a))).then(this._init):WebAssembly.instantiate(Buffer.from(o,"base64"),a).then(this._init),E)}_init(A){i=A.instance,a.env.emscripten_notify_memory_growth(0)}decode(A,I=0){if(!i)throw new Error("ZSTDDecoder: Await .init() before decoding.");const g=A.byteLength,B=i.exports.malloc(g);e.set(A,B),I=I||Number(i.exports.ZSTD_findDecompressedSize(B,g));const Q=i.exports.malloc(I),C=i.exports.ZSTD_decompress(Q,I,B,g),E=e.slice(Q,Q+C);return i.exports.free(B),i.exports.free(Q),E}};class D extends t.A{constructor(A){super(),this.planarConfiguration=void 0!==A.PlanarConfiguration?A.PlanarConfiguration:1,this.samplesPerPixel=void 0!==A.SamplesPerPixel?A.SamplesPerPixel:1,this.addCompression=A.LercParameters[s.TZ.AddCompression]}decodeBlock(A){switch(this.addCompression){case s.S3.None:break;case s.S3.Deflate:A=(0,B.UD)(new Uint8Array(A)).buffer;break;case s.S3.Zstandard:A=r.decode(new Uint8Array(A)).buffer;break;default:throw new Error(`Unsupported LERC additional compression method identifier: ${this.addCompression}`)}return C().decode(A,{returnPixelInterleavedDims:1===this.planarConfiguration}).pixels[0].buffer}}},92322:(A,I)=>{var g,B,Q,C,E,i,e,a,o,t,s,r,D;B={defaultNoDataValue:-34027999387901484e22,decode:function(A,I){var g=(I=I||{}).encodedMaskData||null===I.encodedMaskData,e=i(A,I.inputOffset||0,g),a=null!==I.noDataValue?I.noDataValue:B.defaultNoDataValue,o=Q(e,I.pixelType||Float32Array,I.encodedMaskData,a,I.returnMask),t={width:e.width,height:e.height,pixelData:o.resultPixels,minValue:o.minValue,maxValue:e.pixels.maxValue,noDataValue:a};return o.resultMask&&(t.maskData=o.resultMask),I.returnEncodedMask&&e.mask&&(t.encodedMaskData=e.mask.bitset?e.mask.bitset:null),I.returnFileInfo&&(t.fileInfo=C(e),I.computeUsedBitDepths&&(t.fileInfo.bitDepths=E(e))),t}},Q=function(A,I,g,B,Q){var C,E,i,a=0,o=A.pixels.numBlocksX,t=A.pixels.numBlocksY,s=Math.floor(A.width/o),r=Math.floor(A.height/t),D=2*A.maxZError,n=Number.MAX_VALUE;g=g||(A.mask?A.mask.bitset:null),E=new I(A.width*A.height),Q&&g&&(i=new Uint8Array(A.width*A.height));for(var w,h,f=new Float32Array(s*r),G=0;G<=t;G++){var y=G!==t?r:A.height%t;if(0!==y)for(var F=0;F<=o;F++){var l=F!==o?s:A.width%o;if(0!==l){var k,c,U,S,d=G*A.width*r+F*s,R=A.width-l,M=A.pixels.blocks[a];if(M.encoding<2?(0===M.encoding?k=M.rawData:(e(M.stuffedData,M.bitsPerPixel,M.numValidPixels,M.offset,D,f,A.pixels.maxValue),k=f),c=0):U=2===M.encoding?0:M.offset,g)for(h=0;h<y;h++){for(7&d&&(S=g[d>>3],S<<=7&d),w=0;w<l;w++)7&d||(S=g[d>>3]),128&S?(i&&(i[d]=1),n=n>(C=M.encoding<2?k[c++]:U)?C:n,E[d++]=C):(i&&(i[d]=0),E[d++]=B),S<<=1;d+=R}else if(M.encoding<2)for(h=0;h<y;h++){for(w=0;w<l;w++)n=n>(C=k[c++])?C:n,E[d++]=C;d+=R}else for(n=n>U?U:n,h=0;h<y;h++){for(w=0;w<l;w++)E[d++]=U;d+=R}if(1===M.encoding&&c!==M.numValidPixels)throw"Block and Mask do not match";a++}}}return{resultPixels:E,resultMask:i,minValue:n}},C=function(A){return{fileIdentifierString:A.fileIdentifierString,fileVersion:A.fileVersion,imageType:A.imageType,height:A.height,width:A.width,maxZError:A.maxZError,eofOffset:A.eofOffset,mask:A.mask?{numBlocksX:A.mask.numBlocksX,numBlocksY:A.mask.numBlocksY,numBytes:A.mask.numBytes,maxValue:A.mask.maxValue}:null,pixels:{numBlocksX:A.pixels.numBlocksX,numBlocksY:A.pixels.numBlocksY,numBytes:A.pixels.numBytes,maxValue:A.pixels.maxValue,noDataValue:A.noDataValue}}},E=function(A){for(var I=A.pixels.numBlocksX*A.pixels.numBlocksY,g={},B=0;B<I;B++){var Q=A.pixels.blocks[B];0===Q.encoding?g.float32=!0:1===Q.encoding?g[Q.bitsPerPixel]=!0:g[0]=!0}return Object.keys(g)},i=function(A,I,g){var B={},Q=new Uint8Array(A,I,10);if(B.fileIdentifierString=String.fromCharCode.apply(null,Q),"CntZImage"!==B.fileIdentifierString.trim())throw"Unexpected file identifier string: "+B.fileIdentifierString;I+=10;var C=new DataView(A,I,24);if(B.fileVersion=C.getInt32(0,!0),B.imageType=C.getInt32(4,!0),B.height=C.getUint32(8,!0),B.width=C.getUint32(12,!0),B.maxZError=C.getFloat64(16,!0),I+=24,!g)if(C=new DataView(A,I,16),B.mask={},B.mask.numBlocksY=C.getUint32(0,!0),B.mask.numBlocksX=C.getUint32(4,!0),B.mask.numBytes=C.getUint32(8,!0),B.mask.maxValue=C.getFloat32(12,!0),I+=16,B.mask.numBytes>0){var E=new Uint8Array(Math.ceil(B.width*B.height/8)),i=(C=new DataView(A,I,B.mask.numBytes)).getInt16(0,!0),e=2,a=0;do{if(i>0)for(;i--;)E[a++]=C.getUint8(e++);else{var o=C.getUint8(e++);for(i=-i;i--;)E[a++]=o}i=C.getInt16(e,!0),e+=2}while(e<B.mask.numBytes);if(-32768!==i||a<E.length)throw"Unexpected end of mask RLE encoding";B.mask.bitset=E,I+=B.mask.numBytes}else B.mask.numBytes|B.mask.numBlocksY|B.mask.maxValue||(B.mask.bitset=new Uint8Array(Math.ceil(B.width*B.height/8)));C=new DataView(A,I,16),B.pixels={},B.pixels.numBlocksY=C.getUint32(0,!0),B.pixels.numBlocksX=C.getUint32(4,!0),B.pixels.numBytes=C.getUint32(8,!0),B.pixels.maxValue=C.getFloat32(12,!0),I+=16;var t=B.pixels.numBlocksX,s=B.pixels.numBlocksY,r=t+(B.width%t>0?1:0),D=s+(B.height%s>0?1:0);B.pixels.blocks=new Array(r*D);for(var n=0,w=0;w<D;w++)for(var h=0;h<r;h++){var f=0,G=A.byteLength-I;C=new DataView(A,I,Math.min(10,G));var y={};B.pixels.blocks[n++]=y;var F=C.getUint8(0);if(f++,y.encoding=63&F,y.encoding>3)throw"Invalid block encoding ("+y.encoding+")";if(2!==y.encoding){if(0!==F&&2!==F){if(F>>=6,y.offsetType=F,2===F)y.offset=C.getInt8(1),f++;else if(1===F)y.offset=C.getInt16(1,!0),f+=2;else{if(0!==F)throw"Invalid block offset type";y.offset=C.getFloat32(1,!0),f+=4}if(1===y.encoding)if(F=C.getUint8(f),f++,y.bitsPerPixel=63&F,F>>=6,y.numValidPixelsType=F,2===F)y.numValidPixels=C.getUint8(f),f++;else if(1===F)y.numValidPixels=C.getUint16(f,!0),f+=2;else{if(0!==F)throw"Invalid valid pixel count type";y.numValidPixels=C.getUint32(f,!0),f+=4}}var l;if(I+=f,3!==y.encoding)if(0===y.encoding){var k=(B.pixels.numBytes-1)/4;if(k!==Math.floor(k))throw"uncompressed block has invalid length";l=new ArrayBuffer(4*k),new Uint8Array(l).set(new Uint8Array(A,I,4*k));var c=new Float32Array(l);y.rawData=c,I+=4*k}else if(1===y.encoding){var U=Math.ceil(y.numValidPixels*y.bitsPerPixel/8),S=Math.ceil(U/4);l=new ArrayBuffer(4*S),new Uint8Array(l).set(new Uint8Array(A,I,U)),y.stuffedData=new Uint32Array(l),I+=U}}else I++}return B.eofOffset=I,B},e=function(A,I,g,B,Q,C,E){var i,e,a,o=(1<<I)-1,t=0,s=0,r=Math.ceil((E-B)/Q),D=4*A.length-Math.ceil(I*g/8);for(A[A.length-1]<<=8*D,i=0;i<g;i++){if(0===s&&(a=A[t++],s=32),s>=I)e=a>>>s-I&o,s-=I;else{var n=I-s;e=(a&o)<<n&o,e+=(a=A[t++])>>>(s=32-n)}C[i]=e<r?B+e*Q:E}return C},t=B,s=function(){"use strict";var A=function(A,I,g,B,Q,C,E,i){var e,a,o,t,s,r=(1<<g)-1,D=0,n=0,w=4*A.length-Math.ceil(g*B/8);if(A[A.length-1]<<=8*w,Q)for(e=0;e<B;e++)0===n&&(o=A[D++],n=32),n>=g?(a=o>>>n-g&r,n-=g):(a=(o&r)<<(t=g-n)&r,a+=(o=A[D++])>>>(n=32-t)),I[e]=Q[a];else for(s=Math.ceil((i-C)/E),e=0;e<B;e++)0===n&&(o=A[D++],n=32),n>=g?(a=o>>>n-g&r,n-=g):(a=(o&r)<<(t=g-n)&r,a+=(o=A[D++])>>>(n=32-t)),I[e]=a<s?C+a*E:i},I=function(A,I,g,B,Q,C,E,i){var e,a,o,t,s=(1<<g)-1,r=0,D=0,n=0;if(Q)for(e=0;e<B;e++)0===D&&(o=A[r++],D=32,n=0),D>=g?(a=o>>>n&s,D-=g,n+=g):(a=o>>>n&s,D=32-(t=g-D),a|=((o=A[r++])&(1<<t)-1)<<g-t,n=t),I[e]=Q[a];else{var w=Math.ceil((i-C)/E);for(e=0;e<B;e++)0===D&&(o=A[r++],D=32,n=0),D>=g?(a=o>>>n&s,D-=g,n+=g):(a=o>>>n&s,D=32-(t=g-D),a|=((o=A[r++])&(1<<t)-1)<<g-t,n=t),I[e]=a<w?C+a*E:i}return I},g={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(A){for(var I=65535,g=65535,B=A.length,Q=Math.floor(B/2),C=0;Q;){var E=Q>=359?359:Q;Q-=E;do{I+=A[C++]<<8,g+=I+=A[C++]}while(--E);I=(65535&I)+(I>>>16),g=(65535&g)+(g>>>16)}return 1&B&&(g+=I+=A[C]<<8),((g=(65535&g)+(g>>>16))<<16|(I=(65535&I)+(I>>>16)))>>>0},readHeaderInfo:function(A,I){var g=I.ptr,B=new Uint8Array(A,g,6),Q={};if(Q.fileIdentifierString=String.fromCharCode.apply(null,B),0!==Q.fileIdentifierString.lastIndexOf("Lerc2",0))throw"Unexpected file identifier string (expect Lerc2 ): "+Q.fileIdentifierString;g+=6;var C,E=new DataView(A,g,8),i=E.getInt32(0,!0);if(Q.fileVersion=i,g+=4,i>=3&&(Q.checksum=E.getUint32(4,!0),g+=4),E=new DataView(A,g,12),Q.height=E.getUint32(0,!0),Q.width=E.getUint32(4,!0),g+=8,i>=4?(Q.numDims=E.getUint32(8,!0),g+=4):Q.numDims=1,E=new DataView(A,g,40),Q.numValidPixel=E.getUint32(0,!0),Q.microBlockSize=E.getInt32(4,!0),Q.blobSize=E.getInt32(8,!0),Q.imageType=E.getInt32(12,!0),Q.maxZError=E.getFloat64(16,!0),Q.zMin=E.getFloat64(24,!0),Q.zMax=E.getFloat64(32,!0),g+=40,I.headerInfo=Q,I.ptr=g,i>=3&&(C=i>=4?52:48,this.computeChecksumFletcher32(new Uint8Array(A,g-C,Q.blobSize-14))!==Q.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(A,I){var g=I.headerInfo,B=this.getDataTypeArray(g.imageType),Q=g.numDims*this.getDataTypeSize(g.imageType),C=this.readSubArray(A,I.ptr,B,Q),E=this.readSubArray(A,I.ptr+Q,B,Q);I.ptr+=2*Q;var i,e=!0;for(i=0;i<g.numDims;i++)if(C[i]!==E[i]){e=!1;break}return g.minValues=C,g.maxValues=E,e},readSubArray:function(A,I,g,B){var Q;if(g===Uint8Array)Q=new Uint8Array(A,I,B);else{var C=new ArrayBuffer(B);new Uint8Array(C).set(new Uint8Array(A,I,B)),Q=new g(C)}return Q},readMask:function(A,I){var g,B,Q=I.ptr,C=I.headerInfo,E=C.width*C.height,i=C.numValidPixel,e=new DataView(A,Q,4),a={};if(a.numBytes=e.getUint32(0,!0),Q+=4,(0===i||E===i)&&0!==a.numBytes)throw"invalid mask";if(0===i)g=new Uint8Array(Math.ceil(E/8)),a.bitset=g,B=new Uint8Array(E),I.pixels.resultMask=B,Q+=a.numBytes;else if(a.numBytes>0){g=new Uint8Array(Math.ceil(E/8));var o=(e=new DataView(A,Q,a.numBytes)).getInt16(0,!0),t=2,s=0,r=0;do{if(o>0)for(;o--;)g[s++]=e.getUint8(t++);else for(r=e.getUint8(t++),o=-o;o--;)g[s++]=r;o=e.getInt16(t,!0),t+=2}while(t<a.numBytes);if(-32768!==o||s<g.length)throw"Unexpected end of mask RLE encoding";B=new Uint8Array(E);var D=0,n=0;for(n=0;n<E;n++)7&n?(D=g[n>>3],D<<=7&n):D=g[n>>3],128&D&&(B[n]=1);I.pixels.resultMask=B,a.bitset=g,Q+=a.numBytes}return I.ptr=Q,I.mask=a,!0},readDataOneSweep:function(A,I,B,Q){var C,E=I.ptr,i=I.headerInfo,e=i.numDims,a=i.width*i.height,o=i.imageType,t=i.numValidPixel*g.getDataTypeSize(o)*e,s=I.pixels.resultMask;if(B===Uint8Array)C=new Uint8Array(A,E,t);else{var r=new ArrayBuffer(t);new Uint8Array(r).set(new Uint8Array(A,E,t)),C=new B(r)}if(C.length===a*e)I.pixels.resultPixels=Q?g.swapDimensionOrder(C,a,e,B,!0):C;else{I.pixels.resultPixels=new B(a*e);var D=0,n=0,w=0,h=0;if(e>1){if(Q){for(n=0;n<a;n++)if(s[n])for(h=n,w=0;w<e;w++,h+=a)I.pixels.resultPixels[h]=C[D++]}else for(n=0;n<a;n++)if(s[n])for(h=n*e,w=0;w<e;w++)I.pixels.resultPixels[h+w]=C[D++]}else for(n=0;n<a;n++)s[n]&&(I.pixels.resultPixels[n]=C[D++])}return E+=t,I.ptr=E,!0},readHuffmanTree:function(A,I){var Q=this.HUFFMAN_LUT_BITS_MAX,C=new DataView(A,I.ptr,16);if(I.ptr+=16,C.getInt32(0,!0)<2)throw"unsupported Huffman version";var E=C.getInt32(4,!0),i=C.getInt32(8,!0),e=C.getInt32(12,!0);if(i>=e)return!1;var a=new Uint32Array(e-i);g.decodeBits(A,I,a);var o,t,s,r,D=[];for(o=i;o<e;o++)D[t=o-(o<E?0:E)]={first:a[o-i],second:null};var n=A.byteLength-I.ptr,w=Math.ceil(n/4),h=new ArrayBuffer(4*w);new Uint8Array(h).set(new Uint8Array(A,I.ptr,n));var f,G=new Uint32Array(h),y=0,F=0;for(f=G[0],o=i;o<e;o++)(r=D[t=o-(o<E?0:E)].first)>0&&(D[t].second=f<<y>>>32-r,32-y>=r?32===(y+=r)&&(y=0,f=G[++F]):(y+=r-32,f=G[++F],D[t].second|=f>>>32-y));var l,k=0,c=new B;for(o=0;o<D.length;o++)void 0!==D[o]&&(k=Math.max(k,D[o].first));l=k>=Q?Q:k;var U,S,d,R,M,L=[];for(o=i;o<e;o++)if((r=D[t=o-(o<E?0:E)].first)>0)if(U=[r,t],r<=l)for(S=D[t].second<<l-r,d=1<<l-r,s=0;s<d;s++)L[S|s]=U;else for(S=D[t].second,M=c,R=r-1;R>=0;R--)S>>>R&1?(M.right||(M.right=new B),M=M.right):(M.left||(M.left=new B),M=M.left),0!==R||M.val||(M.val=U[1]);return{decodeLut:L,numBitsLUTQick:l,numBitsLUT:k,tree:c,stuffedData:G,srcPtr:F,bitPos:y}},readHuffman:function(A,I,B,Q){var C,E,i,e,a,o,t,s,r,D=I.headerInfo.numDims,n=I.headerInfo.height,w=I.headerInfo.width,h=w*n,f=this.readHuffmanTree(A,I),G=f.decodeLut,y=f.tree,F=f.stuffedData,l=f.srcPtr,k=f.bitPos,c=f.numBitsLUTQick,U=f.numBitsLUT,S=0===I.headerInfo.imageType?128:0,d=I.pixels.resultMask,R=0;k>0&&(l++,k=0);var M,L=F[l],N=1===I.encodeMode,J=new B(h*D),u=J;if(D<2||N){for(M=0;M<D;M++)if(D>1&&(u=new B(J.buffer,h*M,h),R=0),I.headerInfo.numValidPixel===w*n)for(s=0,o=0;o<n;o++)for(t=0;t<w;t++,s++){if(E=0,a=e=L<<k>>>32-c,32-k<c&&(a=e|=F[l+1]>>>64-k-c),G[a])E=G[a][1],k+=G[a][0];else for(a=e=L<<k>>>32-U,32-k<U&&(a=e|=F[l+1]>>>64-k-U),C=y,r=0;r<U;r++)if(!(C=e>>>U-r-1&1?C.right:C.left).left&&!C.right){E=C.val,k=k+r+1;break}k>=32&&(k-=32,L=F[++l]),i=E-S,N?(i+=t>0?R:o>0?u[s-w]:R,i&=255,u[s]=i,R=i):u[s]=i}else for(s=0,o=0;o<n;o++)for(t=0;t<w;t++,s++)if(d[s]){if(E=0,a=e=L<<k>>>32-c,32-k<c&&(a=e|=F[l+1]>>>64-k-c),G[a])E=G[a][1],k+=G[a][0];else for(a=e=L<<k>>>32-U,32-k<U&&(a=e|=F[l+1]>>>64-k-U),C=y,r=0;r<U;r++)if(!(C=e>>>U-r-1&1?C.right:C.left).left&&!C.right){E=C.val,k=k+r+1;break}k>=32&&(k-=32,L=F[++l]),i=E-S,N?(t>0&&d[s-1]?i+=R:o>0&&d[s-w]?i+=u[s-w]:i+=R,i&=255,u[s]=i,R=i):u[s]=i}}else for(s=0,o=0;o<n;o++)for(t=0;t<w;t++)if(s=o*w+t,!d||d[s])for(M=0;M<D;M++,s+=h){if(E=0,a=e=L<<k>>>32-c,32-k<c&&(a=e|=F[l+1]>>>64-k-c),G[a])E=G[a][1],k+=G[a][0];else for(a=e=L<<k>>>32-U,32-k<U&&(a=e|=F[l+1]>>>64-k-U),C=y,r=0;r<U;r++)if(!(C=e>>>U-r-1&1?C.right:C.left).left&&!C.right){E=C.val,k=k+r+1;break}k>=32&&(k-=32,L=F[++l]),i=E-S,u[s]=i}I.ptr=I.ptr+4*(l+1)+(k>0?4:0),I.pixels.resultPixels=J,D>1&&!Q&&(I.pixels.resultPixels=g.swapDimensionOrder(J,h,D,B))},decodeBits:function(g,B,Q,C,E){var i=B.headerInfo,e=i.fileVersion,a=0,o=g.byteLength-B.ptr>=5?5:g.byteLength-B.ptr,t=new DataView(g,B.ptr,o),s=t.getUint8(0);a++;var r=s>>6,D=0===r?4:3-r,n=(32&s)>0,w=31&s,h=0;if(1===D)h=t.getUint8(a),a++;else if(2===D)h=t.getUint16(a,!0),a+=2;else{if(4!==D)throw"Invalid valid pixel count type";h=t.getUint32(a,!0),a+=4}var f,G,y,F,l,k,c,U,S,d=2*i.maxZError,R=i.numDims>1?i.maxValues[E]:i.zMax;if(n){for(B.counter.lut++,U=t.getUint8(a),a++,F=Math.ceil((U-1)*w/8),l=Math.ceil(F/4),G=new ArrayBuffer(4*l),y=new Uint8Array(G),B.ptr+=a,y.set(new Uint8Array(g,B.ptr,F)),c=new Uint32Array(G),B.ptr+=F,S=0;U-1>>>S;)S++;F=Math.ceil(h*S/8),l=Math.ceil(F/4),G=new ArrayBuffer(4*l),(y=new Uint8Array(G)).set(new Uint8Array(g,B.ptr,F)),f=new Uint32Array(G),B.ptr+=F,k=e>=3?function(A,I,g,B,Q,C){var E,i=(1<<I)-1,e=0,a=0,o=0,t=0,s=0,r=0,D=[],n=Math.ceil((C-B)/Q);for(a=0;a<g;a++)0===t&&(E=A[e++],t=32,r=0),t>=I?(s=E>>>r&i,t-=I,r+=I):(s=E>>>r&i,t=32-(o=I-t),s|=((E=A[e++])&(1<<o)-1)<<I-o,r=o),D[a]=s<n?B+s*Q:C;return D.unshift(B),D}(c,w,U-1,C,d,R):function(A,I,g,B,Q,C){var E,i=(1<<I)-1,e=0,a=0,o=0,t=0,s=0,r=[],D=4*A.length-Math.ceil(I*g/8);A[A.length-1]<<=8*D;var n=Math.ceil((C-B)/Q);for(a=0;a<g;a++)0===t&&(E=A[e++],t=32),t>=I?(s=E>>>t-I&i,t-=I):(s=(E&i)<<(o=I-t)&i,s+=(E=A[e++])>>>(t=32-o)),r[a]=s<n?B+s*Q:C;return r.unshift(B),r}(c,w,U-1,C,d,R),e>=3?I(f,Q,S,h,k):A(f,Q,S,h,k)}else B.counter.bitstuffer++,S=w,B.ptr+=a,S>0&&(F=Math.ceil(h*S/8),l=Math.ceil(F/4),G=new ArrayBuffer(4*l),(y=new Uint8Array(G)).set(new Uint8Array(g,B.ptr,F)),f=new Uint32Array(G),B.ptr+=F,e>=3?null==C?function(A,I,g,B){var Q,C,E,i,e=(1<<g)-1,a=0,o=0,t=0;for(Q=0;Q<B;Q++)0===o&&(E=A[a++],o=32,t=0),o>=g?(C=E>>>t&e,o-=g,t+=g):(C=E>>>t&e,o=32-(i=g-o),C|=((E=A[a++])&(1<<i)-1)<<g-i,t=i),I[Q]=C}(f,Q,S,h):I(f,Q,S,h,!1,C,d,R):null==C?function(A,I,g,B){var Q,C,E,i,e=(1<<g)-1,a=0,o=0,t=4*A.length-Math.ceil(g*B/8);for(A[A.length-1]<<=8*t,Q=0;Q<B;Q++)0===o&&(E=A[a++],o=32),o>=g?(C=E>>>o-g&e,o-=g):(C=(E&e)<<(i=g-o)&e,C+=(E=A[a++])>>>(o=32-i)),I[Q]=C}(f,Q,S,h):A(f,Q,S,h,!1,C,d,R))},readTiles:function(A,I,B,Q){var C=I.headerInfo,E=C.width,i=C.height,e=E*i,a=C.microBlockSize,o=C.imageType,t=g.getDataTypeSize(o),s=Math.ceil(E/a),r=Math.ceil(i/a);I.pixels.numBlocksY=r,I.pixels.numBlocksX=s,I.pixels.ptr=0;var D,n,w,h,f,G,y,F,l,k,c=0,U=0,S=0,d=0,R=0,M=0,L=0,N=0,J=0,u=0,q=0,Y=0,m=0,p=0,x=0,H=new B(a*a),K=i%a||a,V=E%a||a,b=C.numDims,O=I.pixels.resultMask,v=I.pixels.resultPixels,X=C.fileVersion>=5?14:15,P=C.zMax;for(S=0;S<r;S++)for(R=S!==r-1?a:K,d=0;d<s;d++)for(u=S*E*a+d*a,q=E-(M=d!==s-1?a:V),F=0;F<b;F++){if(b>1?(k=v,u=S*E*a+d*a,v=new B(I.pixels.resultPixels.buffer,e*F*t,e),P=C.maxValues[F]):k=null,L=A.byteLength-I.ptr,n={},x=0,N=(D=new DataView(A,I.ptr,Math.min(10,L))).getUint8(0),x++,l=C.fileVersion>=5?4&N:0,J=N>>6&255,(N>>2&X)!=(d*a>>3&X))throw"integrity issue";if(l&&0===F)throw"integrity issue";if((f=3&N)>3)throw I.ptr+=x,"Invalid block encoding ("+f+")";if(2!==f)if(0===f){if(l)throw"integrity issue";if(I.counter.uncompressed++,I.ptr+=x,Y=(Y=R*M*t)<(m=A.byteLength-I.ptr)?Y:m,w=new ArrayBuffer(Y%t==0?Y:Y+t-Y%t),new Uint8Array(w).set(new Uint8Array(A,I.ptr,Y)),h=new B(w),p=0,O)for(c=0;c<R;c++){for(U=0;U<M;U++)O[u]&&(v[u]=h[p++]),u++;u+=q}else for(c=0;c<R;c++){for(U=0;U<M;U++)v[u++]=h[p++];u+=q}I.ptr+=p*t}else if(G=g.getDataTypeUsed(l&&o<6?4:o,J),y=g.getOnePixel(n,x,G,D),x+=g.getDataTypeSize(G),3===f)if(I.ptr+=x,I.counter.constantoffset++,O)for(c=0;c<R;c++){for(U=0;U<M;U++)O[u]&&(v[u]=l?Math.min(P,k[u]+y):y),u++;u+=q}else for(c=0;c<R;c++){for(U=0;U<M;U++)v[u]=l?Math.min(P,k[u]+y):y,u++;u+=q}else if(I.ptr+=x,g.decodeBits(A,I,H,y,F),x=0,l)if(O)for(c=0;c<R;c++){for(U=0;U<M;U++)O[u]&&(v[u]=H[x++]+k[u]),u++;u+=q}else for(c=0;c<R;c++){for(U=0;U<M;U++)v[u]=H[x++]+k[u],u++;u+=q}else if(O)for(c=0;c<R;c++){for(U=0;U<M;U++)O[u]&&(v[u]=H[x++]),u++;u+=q}else for(c=0;c<R;c++){for(U=0;U<M;U++)v[u++]=H[x++];u+=q}else{if(l)if(O)for(c=0;c<R;c++)for(U=0;U<M;U++)O[u]&&(v[u]=k[u]),u++;else for(c=0;c<R;c++)for(U=0;U<M;U++)v[u]=k[u],u++;I.counter.constant++,I.ptr+=x}}b>1&&!Q&&(I.pixels.resultPixels=g.swapDimensionOrder(I.pixels.resultPixels,e,b,B))},formatFileInfo:function(A){return{fileIdentifierString:A.headerInfo.fileIdentifierString,fileVersion:A.headerInfo.fileVersion,imageType:A.headerInfo.imageType,height:A.headerInfo.height,width:A.headerInfo.width,numValidPixel:A.headerInfo.numValidPixel,microBlockSize:A.headerInfo.microBlockSize,blobSize:A.headerInfo.blobSize,maxZError:A.headerInfo.maxZError,pixelType:g.getPixelType(A.headerInfo.imageType),eofOffset:A.eofOffset,mask:A.mask?{numBytes:A.mask.numBytes}:null,pixels:{numBlocksX:A.pixels.numBlocksX,numBlocksY:A.pixels.numBlocksY,maxValue:A.headerInfo.zMax,minValue:A.headerInfo.zMin,noDataValue:A.noDataValue}}},constructConstantSurface:function(A,I){var g=A.headerInfo.zMax,B=A.headerInfo.zMin,Q=A.headerInfo.maxValues,C=A.headerInfo.numDims,E=A.headerInfo.height*A.headerInfo.width,i=0,e=0,a=0,o=A.pixels.resultMask,t=A.pixels.resultPixels;if(o)if(C>1){if(I)for(i=0;i<C;i++)for(a=i*E,g=Q[i],e=0;e<E;e++)o[e]&&(t[a+e]=g);else for(e=0;e<E;e++)if(o[e])for(a=e*C,i=0;i<C;i++)t[a+C]=Q[i]}else for(e=0;e<E;e++)o[e]&&(t[e]=g);else if(C>1&&B!==g)if(I)for(i=0;i<C;i++)for(a=i*E,g=Q[i],e=0;e<E;e++)t[a+e]=g;else for(e=0;e<E;e++)for(a=e*C,i=0;i<C;i++)t[a+i]=Q[i];else for(e=0;e<E*C;e++)t[e]=g},getDataTypeArray:function(A){var I;switch(A){case 0:I=Int8Array;break;case 1:I=Uint8Array;break;case 2:I=Int16Array;break;case 3:I=Uint16Array;break;case 4:I=Int32Array;break;case 5:I=Uint32Array;break;case 6:default:I=Float32Array;break;case 7:I=Float64Array}return I},getPixelType:function(A){var I;switch(A){case 0:I="S8";break;case 1:I="U8";break;case 2:I="S16";break;case 3:I="U16";break;case 4:I="S32";break;case 5:I="U32";break;case 6:default:I="F32";break;case 7:I="F64"}return I},isValidPixelValue:function(A,I){if(null==I)return!1;var g;switch(A){case 0:g=I>=-128&&I<=127;break;case 1:g=I>=0&&I<=255;break;case 2:g=I>=-32768&&I<=32767;break;case 3:g=I>=0&&I<=65536;break;case 4:g=I>=-2147483648&&I<=2147483647;break;case 5:g=I>=0&&I<=4294967296;break;case 6:g=I>=-34027999387901484e22&&I<=34027999387901484e22;break;case 7:g=I>=-17976931348623157e292&&I<=17976931348623157e292;break;default:g=!1}return g},getDataTypeSize:function(A){var I=0;switch(A){case 0:case 1:I=1;break;case 2:case 3:I=2;break;case 4:case 5:case 6:I=4;break;case 7:I=8;break;default:I=A}return I},getDataTypeUsed:function(A,I){var g=A;switch(A){case 2:case 4:g=A-I;break;case 3:case 5:g=A-2*I;break;case 6:g=0===I?A:1===I?2:1;break;case 7:g=0===I?A:A-2*I+1;break;default:g=A}return g},getOnePixel:function(A,I,g,B){var Q=0;switch(g){case 0:Q=B.getInt8(I);break;case 1:Q=B.getUint8(I);break;case 2:Q=B.getInt16(I,!0);break;case 3:Q=B.getUint16(I,!0);break;case 4:Q=B.getInt32(I,!0);break;case 5:Q=B.getUInt32(I,!0);break;case 6:Q=B.getFloat32(I,!0);break;case 7:Q=B.getFloat64(I,!0);break;default:throw"the decoder does not understand this pixel type"}return Q},swapDimensionOrder:function(A,I,g,B,Q){var C=0,E=0,i=0,e=0,a=A;if(g>1)if(a=new B(I*g),Q)for(C=0;C<I;C++)for(e=C,i=0;i<g;i++,e+=I)a[e]=A[E++];else for(C=0;C<I;C++)for(e=C,i=0;i<g;i++,e+=I)a[E++]=A[e];return a}},B=function(A,I,g){this.val=A,this.left=I,this.right=g};return{decode:function(A,I){var B=(I=I||{}).noDataValue,Q=0,C={};if(C.ptr=I.inputOffset||0,C.pixels={},g.readHeaderInfo(A,C)){var E=C.headerInfo,i=E.fileVersion,e=g.getDataTypeArray(E.imageType);if(i>5)throw"unsupported lerc version 2."+i;g.readMask(A,C),E.numValidPixel===E.width*E.height||C.pixels.resultMask||(C.pixels.resultMask=I.maskData);var a=E.width*E.height;C.pixels.resultPixels=new e(a*E.numDims),C.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0};var o,t=!I.returnPixelInterleavedDims;if(0!==E.numValidPixel)if(E.zMax===E.zMin)g.constructConstantSurface(C,t);else if(i>=4&&g.checkMinMaxRanges(A,C))g.constructConstantSurface(C,t);else{var s=new DataView(A,C.ptr,2),r=s.getUint8(0);if(C.ptr++,r)g.readDataOneSweep(A,C,e,t);else if(i>1&&E.imageType<=1&&Math.abs(E.maxZError-.5)<1e-5){var D=s.getUint8(1);if(C.ptr++,C.encodeMode=D,D>2||i<4&&D>1)throw"Invalid Huffman flag "+D;D?g.readHuffman(A,C,e,t):g.readTiles(A,C,e,t)}else g.readTiles(A,C,e,t)}C.eofOffset=C.ptr,I.inputOffset?(o=C.headerInfo.blobSize+I.inputOffset-C.ptr,Math.abs(o)>=1&&(C.eofOffset=I.inputOffset+C.headerInfo.blobSize)):(o=C.headerInfo.blobSize-C.ptr,Math.abs(o)>=1&&(C.eofOffset=C.headerInfo.blobSize));var n={width:E.width,height:E.height,pixelData:C.pixels.resultPixels,minValue:E.zMin,maxValue:E.zMax,validPixelCount:E.numValidPixel,dimCount:E.numDims,dimStats:{minValues:E.minValues,maxValues:E.maxValues},maskData:C.pixels.resultMask};if(C.pixels.resultMask&&g.isValidPixelValue(E.imageType,B)){var w=C.pixels.resultMask;for(Q=0;Q<a;Q++)w[Q]||(n.pixelData[Q]=B);n.noDataValue=B}return C.noDataValue=B,I.returnFileInfo&&(n.fileInfo=g.formatFileInfo(C)),n}},getBandCount:function(A){for(var I=0,B=0,Q={ptr:0,pixels:{}};B<A.byteLength-58;)g.readHeaderInfo(A,Q),B+=Q.headerInfo.blobSize,I++,Q.ptr=B;return I}}}(),a=new ArrayBuffer(4),o=new Uint8Array(a),new Uint32Array(a)[0]=1,r=1===o[0],D={decode:function(A,I){if(!r)throw"Big endian system is not supported.";var g,B,Q=(I=I||{}).inputOffset||0,C=new Uint8Array(A,Q,10),E=String.fromCharCode.apply(null,C);if("CntZImage"===E.trim())g=t,B=1;else{if("Lerc2"!==E.substring(0,5))throw"Unexpected file identifier string: "+E;g=s,B=2}for(var i,e,a,o,D,n,w=0,h=A.byteLength-10,f=[],G={width:0,height:0,pixels:[],pixelType:I.pixelType,mask:null,statistics:[]},y=0;Q<h;){var F=g.decode(A,{inputOffset:Q,encodedMaskData:i,maskData:a,returnMask:0===w,returnEncodedMask:0===w,returnFileInfo:!0,returnPixelInterleavedDims:I.returnPixelInterleavedDims,pixelType:I.pixelType||null,noDataValue:I.noDataValue||null});Q=F.fileInfo.eofOffset,a=F.maskData,0===w&&(i=F.encodedMaskData,G.width=F.width,G.height=F.height,G.dimCount=F.dimCount||1,G.pixelType=F.pixelType||F.fileInfo.pixelType,G.mask=a),B>1&&(a&&f.push(a),F.fileInfo.mask&&F.fileInfo.mask.numBytes>0&&y++),w++,G.pixels.push(F.pixelData),G.statistics.push({minValue:F.minValue,maxValue:F.maxValue,noDataValue:F.noDataValue,dimStats:F.dimStats})}if(B>1&&y>1){for(n=G.width*G.height,G.bandMasks=f,(a=new Uint8Array(n)).set(f[0]),o=1;o<f.length;o++)for(e=f[o],D=0;D<n;D++)a[D]=a[D]&e[D];G.maskData=a}return G}},void 0===(g=function(){return D}.apply(I,[]))||(A.exports=g)}}]);
|