Compress repo
authorEthan Nelson <git@ethan-nelson.com>
Fri, 2 Mar 2018 18:27:04 +0000 (13:27 -0500)
committerEthan Nelson <git@ethan-nelson.com>
Fri, 2 Mar 2018 18:27:04 +0000 (13:27 -0500)
326 files changed:
.gitignore [new file with mode: 0644]
.gitmodules [new file with mode: 0644]
LICENSE [new file with mode: 0644]
README.md [new file with mode: 0644]
_config.yml [new file with mode: 0644]
_includes/footer.html [new file with mode: 0644]
_includes/head.html [new file with mode: 0644]
_includes/header.html [new file with mode: 0644]
_layouts/default.html [new file with mode: 0644]
_layouts/page.html [new file with mode: 0644]
_sass/_base.scss [new file with mode: 0644]
_sass/_layout.scss [new file with mode: 0644]
_sass/_syntax-highlighting.scss [new file with mode: 0644]
compressed_log.txt [new file with mode: 0644]
coords.js [new file with mode: 0644]
css/main.scss [new file with mode: 0755]
data/.gitkeep [new file with mode: 0644]
data_init_download.sh [new file with mode: 0644]
generate_plots.py [new file with mode: 0644]
images/h/lat/0/0.png [new file with mode: 0644]
images/h/lat/0/1.png [new file with mode: 0644]
images/h/lat/0/2.png [new file with mode: 0644]
images/h/lat/0/3.png [new file with mode: 0644]
images/h/lat/0/4.png [new file with mode: 0644]
images/h/lat/1/0.png [new file with mode: 0644]
images/h/lat/1/1.png [new file with mode: 0644]
images/h/lat/1/2.png [new file with mode: 0644]
images/h/lat/1/3.png [new file with mode: 0644]
images/h/lat/1/4.png [new file with mode: 0644]
images/h/lat/2/0.png [new file with mode: 0644]
images/h/lat/2/1.png [new file with mode: 0644]
images/h/lat/2/2.png [new file with mode: 0644]
images/h/lat/2/3.png [new file with mode: 0644]
images/h/lat/2/4.png [new file with mode: 0644]
images/h/lat/3/0.png [new file with mode: 0644]
images/h/lat/3/1.png [new file with mode: 0644]
images/h/lat/3/2.png [new file with mode: 0644]
images/h/lat/3/3.png [new file with mode: 0644]
images/h/lat/3/4.png [new file with mode: 0644]
images/h/lat/4/0.png [new file with mode: 0644]
images/h/lat/4/1.png [new file with mode: 0644]
images/h/lat/4/2.png [new file with mode: 0644]
images/h/lat/4/3.png [new file with mode: 0644]
images/h/lat/4/4.png [new file with mode: 0644]
images/h/lat/5/0.png [new file with mode: 0644]
images/h/lat/5/1.png [new file with mode: 0644]
images/h/lat/5/2.png [new file with mode: 0644]
images/h/lat/5/3.png [new file with mode: 0644]
images/h/lat/5/4.png [new file with mode: 0644]
images/h/leg/0.png [new file with mode: 0644]
images/h/leg/1.png [new file with mode: 0644]
images/h/leg/2.png [new file with mode: 0644]
images/h/leg/3.png [new file with mode: 0644]
images/h/leg/4.png [new file with mode: 0644]
images/h/lon/0/0.png [new file with mode: 0644]
images/h/lon/0/1.png [new file with mode: 0644]
images/h/lon/0/2.png [new file with mode: 0644]
images/h/lon/0/3.png [new file with mode: 0644]
images/h/lon/0/4.png [new file with mode: 0644]
images/h/lon/1/0.png [new file with mode: 0644]
images/h/lon/1/1.png [new file with mode: 0644]
images/h/lon/1/2.png [new file with mode: 0644]
images/h/lon/1/3.png [new file with mode: 0644]
images/h/lon/1/4.png [new file with mode: 0644]
images/h/lon/2/0.png [new file with mode: 0644]
images/h/lon/2/1.png [new file with mode: 0644]
images/h/lon/2/2.png [new file with mode: 0644]
images/h/lon/2/3.png [new file with mode: 0644]
images/h/lon/2/4.png [new file with mode: 0644]
images/h/lon/3/0.png [new file with mode: 0644]
images/h/lon/3/1.png [new file with mode: 0644]
images/h/lon/3/2.png [new file with mode: 0644]
images/h/lon/3/3.png [new file with mode: 0644]
images/h/lon/3/4.png [new file with mode: 0644]
images/h/lon/4/0.png [new file with mode: 0644]
images/h/lon/4/1.png [new file with mode: 0644]
images/h/lon/4/2.png [new file with mode: 0644]
images/h/lon/4/3.png [new file with mode: 0644]
images/h/lon/4/4.png [new file with mode: 0644]
images/h/lon/5/0.png [new file with mode: 0644]
images/h/lon/5/1.png [new file with mode: 0644]
images/h/lon/5/2.png [new file with mode: 0644]
images/h/lon/5/3.png [new file with mode: 0644]
images/h/lon/5/4.png [new file with mode: 0644]
images/h/vert/0/0.png [new file with mode: 0644]
images/h/vert/0/1.png [new file with mode: 0644]
images/h/vert/0/2.png [new file with mode: 0644]
images/h/vert/0/3.png [new file with mode: 0644]
images/h/vert/0/4.png [new file with mode: 0644]
images/h/vert/1/0.png [new file with mode: 0644]
images/h/vert/1/1.png [new file with mode: 0644]
images/h/vert/1/2.png [new file with mode: 0644]
images/h/vert/1/3.png [new file with mode: 0644]
images/h/vert/1/4.png [new file with mode: 0644]
images/h/vert/10/0.png [new file with mode: 0644]
images/h/vert/10/1.png [new file with mode: 0644]
images/h/vert/10/2.png [new file with mode: 0644]
images/h/vert/10/3.png [new file with mode: 0644]
images/h/vert/10/4.png [new file with mode: 0644]
images/h/vert/2/0.png [new file with mode: 0644]
images/h/vert/2/1.png [new file with mode: 0644]
images/h/vert/2/2.png [new file with mode: 0644]
images/h/vert/2/3.png [new file with mode: 0644]
images/h/vert/2/4.png [new file with mode: 0644]
images/h/vert/3/0.png [new file with mode: 0644]
images/h/vert/3/1.png [new file with mode: 0644]
images/h/vert/3/2.png [new file with mode: 0644]
images/h/vert/3/3.png [new file with mode: 0644]
images/h/vert/3/4.png [new file with mode: 0644]
images/h/vert/4/0.png [new file with mode: 0644]
images/h/vert/4/1.png [new file with mode: 0644]
images/h/vert/4/2.png [new file with mode: 0644]
images/h/vert/4/3.png [new file with mode: 0644]
images/h/vert/4/4.png [new file with mode: 0644]
images/h/vert/5/0.png [new file with mode: 0644]
images/h/vert/5/1.png [new file with mode: 0644]
images/h/vert/5/2.png [new file with mode: 0644]
images/h/vert/5/3.png [new file with mode: 0644]
images/h/vert/5/4.png [new file with mode: 0644]
images/h/vert/6/0.png [new file with mode: 0644]
images/h/vert/6/1.png [new file with mode: 0644]
images/h/vert/6/2.png [new file with mode: 0644]
images/h/vert/6/3.png [new file with mode: 0644]
images/h/vert/6/4.png [new file with mode: 0644]
images/h/vert/7/0.png [new file with mode: 0644]
images/h/vert/7/1.png [new file with mode: 0644]
images/h/vert/7/2.png [new file with mode: 0644]
images/h/vert/7/3.png [new file with mode: 0644]
images/h/vert/7/4.png [new file with mode: 0644]
images/h/vert/8/0.png [new file with mode: 0644]
images/h/vert/8/1.png [new file with mode: 0644]
images/h/vert/8/2.png [new file with mode: 0644]
images/h/vert/8/3.png [new file with mode: 0644]
images/h/vert/8/4.png [new file with mode: 0644]
images/h/vert/9/0.png [new file with mode: 0644]
images/h/vert/9/1.png [new file with mode: 0644]
images/h/vert/9/2.png [new file with mode: 0644]
images/h/vert/9/3.png [new file with mode: 0644]
images/h/vert/9/4.png [new file with mode: 0644]
images/l/lat/0/0.png [new file with mode: 0644]
images/l/lat/0/1.png [new file with mode: 0644]
images/l/lat/0/2.png [new file with mode: 0644]
images/l/lat/0/3.png [new file with mode: 0644]
images/l/lat/0/4.png [new file with mode: 0644]
images/l/lat/1/0.png [new file with mode: 0644]
images/l/lat/1/1.png [new file with mode: 0644]
images/l/lat/1/2.png [new file with mode: 0644]
images/l/lat/1/3.png [new file with mode: 0644]
images/l/lat/1/4.png [new file with mode: 0644]
images/l/lat/2/0.png [new file with mode: 0644]
images/l/lat/2/1.png [new file with mode: 0644]
images/l/lat/2/2.png [new file with mode: 0644]
images/l/lat/2/3.png [new file with mode: 0644]
images/l/lat/2/4.png [new file with mode: 0644]
images/l/lat/3/0.png [new file with mode: 0644]
images/l/lat/3/1.png [new file with mode: 0644]
images/l/lat/3/2.png [new file with mode: 0644]
images/l/lat/3/3.png [new file with mode: 0644]
images/l/lat/3/4.png [new file with mode: 0644]
images/l/lat/4/0.png [new file with mode: 0644]
images/l/lat/4/1.png [new file with mode: 0644]
images/l/lat/4/2.png [new file with mode: 0644]
images/l/lat/4/3.png [new file with mode: 0644]
images/l/lat/4/4.png [new file with mode: 0644]
images/l/lat/5/0.png [new file with mode: 0644]
images/l/lat/5/1.png [new file with mode: 0644]
images/l/lat/5/2.png [new file with mode: 0644]
images/l/lat/5/3.png [new file with mode: 0644]
images/l/lat/5/4.png [new file with mode: 0644]
images/l/leg/0.png [new file with mode: 0644]
images/l/leg/1.png [new file with mode: 0644]
images/l/leg/2.png [new file with mode: 0644]
images/l/leg/3.png [new file with mode: 0644]
images/l/leg/4.png [new file with mode: 0644]
images/l/lon/0/0.png [new file with mode: 0644]
images/l/lon/0/1.png [new file with mode: 0644]
images/l/lon/0/2.png [new file with mode: 0644]
images/l/lon/0/3.png [new file with mode: 0644]
images/l/lon/0/4.png [new file with mode: 0644]
images/l/lon/1/0.png [new file with mode: 0644]
images/l/lon/1/1.png [new file with mode: 0644]
images/l/lon/1/2.png [new file with mode: 0644]
images/l/lon/1/3.png [new file with mode: 0644]
images/l/lon/1/4.png [new file with mode: 0644]
images/l/lon/2/0.png [new file with mode: 0644]
images/l/lon/2/1.png [new file with mode: 0644]
images/l/lon/2/2.png [new file with mode: 0644]
images/l/lon/2/3.png [new file with mode: 0644]
images/l/lon/2/4.png [new file with mode: 0644]
images/l/lon/3/0.png [new file with mode: 0644]
images/l/lon/3/1.png [new file with mode: 0644]
images/l/lon/3/2.png [new file with mode: 0644]
images/l/lon/3/3.png [new file with mode: 0644]
images/l/lon/3/4.png [new file with mode: 0644]
images/l/lon/4/0.png [new file with mode: 0644]
images/l/lon/4/1.png [new file with mode: 0644]
images/l/lon/4/2.png [new file with mode: 0644]
images/l/lon/4/3.png [new file with mode: 0644]
images/l/lon/4/4.png [new file with mode: 0644]
images/l/lon/5/0.png [new file with mode: 0644]
images/l/lon/5/1.png [new file with mode: 0644]
images/l/lon/5/2.png [new file with mode: 0644]
images/l/lon/5/3.png [new file with mode: 0644]
images/l/lon/5/4.png [new file with mode: 0644]
images/l/vert/0/0.png [new file with mode: 0644]
images/l/vert/0/1.png [new file with mode: 0644]
images/l/vert/0/2.png [new file with mode: 0644]
images/l/vert/0/3.png [new file with mode: 0644]
images/l/vert/0/4.png [new file with mode: 0644]
images/l/vert/1/0.png [new file with mode: 0644]
images/l/vert/1/1.png [new file with mode: 0644]
images/l/vert/1/2.png [new file with mode: 0644]
images/l/vert/1/3.png [new file with mode: 0644]
images/l/vert/1/4.png [new file with mode: 0644]
images/l/vert/10/0.png [new file with mode: 0644]
images/l/vert/10/1.png [new file with mode: 0644]
images/l/vert/10/2.png [new file with mode: 0644]
images/l/vert/10/3.png [new file with mode: 0644]
images/l/vert/10/4.png [new file with mode: 0644]
images/l/vert/2/0.png [new file with mode: 0644]
images/l/vert/2/1.png [new file with mode: 0644]
images/l/vert/2/2.png [new file with mode: 0644]
images/l/vert/2/3.png [new file with mode: 0644]
images/l/vert/2/4.png [new file with mode: 0644]
images/l/vert/3/0.png [new file with mode: 0644]
images/l/vert/3/1.png [new file with mode: 0644]
images/l/vert/3/2.png [new file with mode: 0644]
images/l/vert/3/3.png [new file with mode: 0644]
images/l/vert/3/4.png [new file with mode: 0644]
images/l/vert/4/0.png [new file with mode: 0644]
images/l/vert/4/1.png [new file with mode: 0644]
images/l/vert/4/2.png [new file with mode: 0644]
images/l/vert/4/3.png [new file with mode: 0644]
images/l/vert/4/4.png [new file with mode: 0644]
images/l/vert/5/0.png [new file with mode: 0644]
images/l/vert/5/1.png [new file with mode: 0644]
images/l/vert/5/2.png [new file with mode: 0644]
images/l/vert/5/3.png [new file with mode: 0644]
images/l/vert/5/4.png [new file with mode: 0644]
images/l/vert/6/0.png [new file with mode: 0644]
images/l/vert/6/1.png [new file with mode: 0644]
images/l/vert/6/2.png [new file with mode: 0644]
images/l/vert/6/3.png [new file with mode: 0644]
images/l/vert/6/4.png [new file with mode: 0644]
images/l/vert/7/0.png [new file with mode: 0644]
images/l/vert/7/1.png [new file with mode: 0644]
images/l/vert/7/2.png [new file with mode: 0644]
images/l/vert/7/3.png [new file with mode: 0644]
images/l/vert/7/4.png [new file with mode: 0644]
images/l/vert/8/0.png [new file with mode: 0644]
images/l/vert/8/1.png [new file with mode: 0644]
images/l/vert/8/2.png [new file with mode: 0644]
images/l/vert/8/3.png [new file with mode: 0644]
images/l/vert/8/4.png [new file with mode: 0644]
images/l/vert/9/0.png [new file with mode: 0644]
images/l/vert/9/1.png [new file with mode: 0644]
images/l/vert/9/2.png [new file with mode: 0644]
images/l/vert/9/3.png [new file with mode: 0644]
images/l/vert/9/4.png [new file with mode: 0644]
images/lat/0/ice.png [new file with mode: 0644]
images/lat/0/liquid.png [new file with mode: 0644]
images/lat/1/ice.png [new file with mode: 0644]
images/lat/1/liquid.png [new file with mode: 0644]
images/lat/2/ice.png [new file with mode: 0644]
images/lat/2/liquid.png [new file with mode: 0644]
images/lat/3/ice.png [new file with mode: 0644]
images/lat/3/liquid.png [new file with mode: 0644]
images/lat/4/ice.png [new file with mode: 0644]
images/lat/4/liquid.png [new file with mode: 0644]
images/lat/5/ice.png [new file with mode: 0644]
images/lat/5/liquid.png [new file with mode: 0644]
images/leg/ice.png [new file with mode: 0644]
images/leg/liquid.png [new file with mode: 0644]
images/lon/0/ice.png [new file with mode: 0644]
images/lon/0/liquid.png [new file with mode: 0644]
images/lon/1/ice.png [new file with mode: 0644]
images/lon/1/liquid.png [new file with mode: 0644]
images/lon/2/ice.png [new file with mode: 0644]
images/lon/2/liquid.png [new file with mode: 0644]
images/lon/3/ice.png [new file with mode: 0644]
images/lon/3/liquid.png [new file with mode: 0644]
images/lon/4/ice.png [new file with mode: 0644]
images/lon/4/liquid.png [new file with mode: 0644]
images/lon/5/ice.png [new file with mode: 0644]
images/lon/5/liquid.png [new file with mode: 0644]
images/radarlabviewertiles [new submodule]
images/rlegend.png [new file with mode: 0644]
images/rr.png [new file with mode: 0644]
images/stemp.png [new file with mode: 0644]
images/swind.png [new file with mode: 0644]
images/tlegend.png [new file with mode: 0644]
images/transparent.png [new file with mode: 0644]
images/vert/0/ice.png [new file with mode: 0644]
images/vert/0/liquid.png [new file with mode: 0644]
images/vert/1/ice.png [new file with mode: 0644]
images/vert/1/liquid.png [new file with mode: 0644]
images/vert/10/ice.png [new file with mode: 0644]
images/vert/10/liquid.png [new file with mode: 0644]
images/vert/2/ice.png [new file with mode: 0644]
images/vert/2/liquid.png [new file with mode: 0644]
images/vert/3/ice.png [new file with mode: 0644]
images/vert/3/liquid.png [new file with mode: 0644]
images/vert/4/ice.png [new file with mode: 0644]
images/vert/4/liquid.png [new file with mode: 0644]
images/vert/5/ice.png [new file with mode: 0644]
images/vert/5/liquid.png [new file with mode: 0644]
images/vert/6/ice.png [new file with mode: 0644]
images/vert/6/liquid.png [new file with mode: 0644]
images/vert/7/ice.png [new file with mode: 0644]
images/vert/7/liquid.png [new file with mode: 0644]
images/vert/8/ice.png [new file with mode: 0644]
images/vert/8/liquid.png [new file with mode: 0644]
images/vert/9/ice.png [new file with mode: 0644]
images/vert/9/liquid.png [new file with mode: 0644]
index.html [new file with mode: 0644]
init_image_dirs.sh [new file with mode: 0644]
js/common.js [new file with mode: 0644]
js/map.js [new file with mode: 0644]
js/midlat.js [new file with mode: 0644]
orbits.md [new file with mode: 0644]
quickbeam.py [new file with mode: 0644]
requirements.txt [new file with mode: 0644]
static/leaflet-0.7.3/images/layers-2x.png [new file with mode: 0644]
static/leaflet-0.7.3/images/layers.png [new file with mode: 0644]
static/leaflet-0.7.3/leaflet.css [new file with mode: 0644]
static/leaflet-0.7.3/leaflet.js [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..870115c
--- /dev/null
@@ -0,0 +1,10 @@
+*.*~
+.sass-cache/*
+.sass-cache
+.sass-cache/*/*
+_site/*
+*.sh
+.DS_Store
+*.swp
+*.py[oc]
+*.h5
diff --git a/.gitmodules b/.gitmodules
new file mode 100644 (file)
index 0000000..98c5dd7
--- /dev/null
@@ -0,0 +1,3 @@
+[submodule "images/radarlabviewertiles"]
+       path = images/radarlabviewertiles
+       url = https://github.com/ethan-nelson/radarlabviewertiles
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..f7b57ea
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Ethan Nelson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..1e9c795
--- /dev/null
+++ b/README.md
@@ -0,0 +1,81 @@
+radarlabviewer
+==============
+
+The radar lab viewer is an interactive viewer of simulated radar reflectivities of a model simulation. Initially designed for an undergraduate radar and satellite course, this applet provides the capability to display vertical and horizontal cross sections of a weather scene.
+
+Installation
+------------
+
+To download this applet, either for development purposes or to host it yourself, first clone the repository and its submodules:
+
+```
+$ git clone --recursive https://github.com/ethan-nelson/radarlabviewer
+```
+
+This applet is generated using the [Jekyll](https://jekyllrb.com) framework, which is used to generate the case pages from the template. While Jekyll is not required to serve the website, it is still necessary for the generation of the rendered web pages locally. However, because this is a static site, you can upload the repository (without rendered web pages) to GitHub to host the website. Do ensure that GitHub Pages is enabled for the repository in the settings.
+
+Generating the applet figures and geospatial information requires Python with a few modules. These are listed in the `requirements.txt` file to aid in installation using pip, but they can also be installed manually.
+
+```
+$ pip install -r requirements.txt
+```
+
+After the Python modules are installed, you need to download the data, either using the `download_data.sh` script if you have curl installed or manually from `https://lecuyer.aos.wisc.edu/radarlabviewerdocs/data.tar.gz`. The five data files must go in the `data` directory.
+
+Building
+--------
+
+The figures and geospatial information can be generated by calling python on the supplied script:
+
+```
+$ python generate_plots.py
+```
+
+To only generate the rendered pages (which can then be served by other web server software such as Apache or nginx):
+
+```
+$ jekyll build --destination _site
+```
+
+To generate rendered pages and serve the website:
+
+```
+$ jekyll serve --watch --destination _site
+```
+
+The `--watch` flag regenerates the pages when any files have been modified.
+
+Customization
+-------------
+
+Additional cases can be included by following the template of one of the scenes in `cases/`. Namely, a custom javascript defining a few variables (like the directory location of new images and the specific crosses for case studies) as well as a markdown file are required. This hasn't really been done much, so contact for more information.
+
+Map and Libraries
+-----------------
+
+Included in this repository is a version of the [Leaflet](http://leafletjs.com) library to display the slippy map. Map tiles are available for the Western Hemisphere in zooms from 3 to 7 at https://github.com/ethan-nelson/radarlabviewertiles. (Note that if you use `git clone --recursive`, the tiles should have been already downloaded to the proper directory.) These tiles have all country borders, only have North American roads included, and only display United States city names. They are standard map tiles, so you can render custom tiles and add them to the map images directory or alternatively modify the map tile variable in `js/map.js`.
+
+Citations
+---------
+
+Model data were taken from a Regional Atmospheric Modeling System cloud allowing simulation:
+
+* Igel AL, van den Heever SC, Naud CM, Saleeby SM, and Posselt DJ (2013): Sensitivity of warm-frontal processes to cloud-nucleating aerosol concentrations. _Journal of the Atmospheric Sciences_, *70* (6), 1768--1783. http://doi.org/10.1175/JAS-D-12-0170.1.
+
+Radar observations were simulated using the Quickbeam simulator:
+
+* Haynes JM, Marchand RT, Luo Z, Bodas-Salcedo A, and Stephens GL (2007): A multipurpose radar simulation package: QuickBeam. _Bulletin of the American Meteorological Society_, *88*, 1723--1728. http://doi.org/10.1175/BAMS-88-11-1723.
+
+All plots were generated with Python matplotlib:
+
+* Hunter JD (2007): Matplotlib: A 2D graphics environment. _Computing in Science and Engineering_, *9* (3), 90--95. http://doi.org/10.1109/MCSE.2007.55.
+
+License
+-------
+
+The applet code is (c) 2015 Ethan Nelson under the MIT License. [See the license file for more information](LICENSE). Please visit the [map tiles repository](https://github.com/ethan-nelson/radarlabviewertiles) for license and acknowledgement information with respect to the map.
+
+Acknowledgements
+----------------
+
+The development of this module was possible thanks to generous funding by NASA Headquarters under the Earth and Space Science Fellowship #NNX14AL35H. An associated learning activity sheet was developed under the auspices of the University of Wisconsin Delta Program for Research, Teaching, and Learning, a project of the Center of the Integration of Research, Teaching, and Learning (NSF Grant #0227592).
diff --git a/_config.yml b/_config.yml
new file mode 100644 (file)
index 0000000..55602af
--- /dev/null
@@ -0,0 +1,21 @@
+# Basic settings of the site. You can change this email to yours or
+#  just comment it out.
+title: Radar Lab Viewer
+email: ethan.nelson@aos.wisc.edu
+description: An interactive radar simulator explorer.
+
+# Change this to the trailing URL you would like to access the site at
+#  (can be a single forward slash as well). This affects the templating
+#  for all site assets, including css, javascript, and images, whether
+#  you use Jekyll to serve the site or not.
+baseurl: "/radarlabviewer"
+
+# Change this to the base URL you would like to access the site at.
+#  This affects the templating for all site assets, including css, java-
+#  script, and images, whether you use Jekyll to serve the site or not.
+url: "http://ethan-nelson.github.io"
+
+# Miscellaneous settings (you can comment these out if desired)
+markdown: kramdown
+github_username: ethan-nelson/radarlabviewer
+exclude: [data]
diff --git a/_includes/footer.html b/_includes/footer.html
new file mode 100644 (file)
index 0000000..8b9b1c1
--- /dev/null
@@ -0,0 +1,54 @@
+<footer class="site-footer">
+
+  <div class="wrapper">
+
+
+
+    <div class="footer-col-wrapper">
+      <div class="footer-col  footer-col-1">
+        <ul class="contact-list">
+          <li>Feedback: <a href="mailto:{{ site.email }}">{{ site.email }}</a></li>
+        </ul>
+      </div>
+
+      <div class="footer-col  footer-col-2">
+        <ul class="social-media-list">
+          {% if site.github_username %}
+          <li>
+            <a href="https://github.com/{{ site.github_username }}" target="_blank">
+              <span class="icon  icon--github">
+                <svg viewBox="0 0 16 16">
+                  <path fill="#828282" d="M7.999,0.431c-4.285,0-7.76,3.474-7.76,7.761 c0,3.428,2.223,6.337,5.307,7.363c0.388,0.071,0.53-0.168,0.53-0.374c0-0.184-0.007-0.672-0.01-1.32 c-2.159,0.469-2.614-1.04-2.614-1.04c-0.353-0.896-0.862-1.135-0.862-1.135c-0.705-0.481,0.053-0.472,0.053-0.472 c0.779,0.055,1.189,0.8,1.189,0.8c0.692,1.186,1.816,0.843,2.258,0.645c0.071-0.502,0.271-0.843,0.493-1.037 C4.86,11.425,3.049,10.76,3.049,7.786c0-0.847,0.302-1.54,0.799-2.082C3.768,5.507,3.501,4.718,3.924,3.65 c0,0,0.652-0.209,2.134,0.796C6.677,4.273,7.34,4.187,8,4.184c0.659,0.003,1.323,0.089,1.943,0.261 c1.482-1.004,2.132-0.796,2.132-0.796c0.423,1.068,0.157,1.857,0.077,2.054c0.497,0.542,0.798,1.235,0.798,2.082 c0,2.981-1.814,3.637-3.543,3.829c0.279,0.24,0.527,0.713,0.527,1.437c0,1.037-0.01,1.874-0.01,2.129 c0,0.208,0.14,0.449,0.534,0.373c3.081-1.028,5.302-3.935,5.302-7.362C15.76,3.906,12.285,0.431,7.999,0.431z"/>
+                </svg>
+              </span>
+
+              <span class="username">{{ site.github_username }}</span>
+            </a>
+          </li>
+          {% endif %}
+
+          {% if site.twitter_username %}
+          <li>
+            <a href="https://twitter.com/{{ site.twitter_username }}">
+              <span class="icon  icon--twitter">
+                <svg viewBox="0 0 16 16">
+                  <path fill="#828282" d="M15.969,3.058c-0.586,0.26-1.217,0.436-1.878,0.515c0.675-0.405,1.194-1.045,1.438-1.809
+                  c-0.632,0.375-1.332,0.647-2.076,0.793c-0.596-0.636-1.446-1.033-2.387-1.033c-1.806,0-3.27,1.464-3.27,3.27 c0,0.256,0.029,0.506,0.085,0.745C5.163,5.404,2.753,4.102,1.14,2.124C0.859,2.607,0.698,3.168,0.698,3.767 c0,1.134,0.577,2.135,1.455,2.722C1.616,6.472,1.112,6.325,0.671,6.08c0,0.014,0,0.027,0,0.041c0,1.584,1.127,2.906,2.623,3.206 C3.02,9.402,2.731,9.442,2.433,9.442c-0.211,0-0.416-0.021-0.615-0.059c0.416,1.299,1.624,2.245,3.055,2.271 c-1.119,0.877-2.529,1.4-4.061,1.4c-0.264,0-0.524-0.015-0.78-0.046c1.447,0.928,3.166,1.469,5.013,1.469 c6.015,0,9.304-4.983,9.304-9.304c0-0.142-0.003-0.283-0.009-0.423C14.976,4.29,15.531,3.714,15.969,3.058z"/>
+                </svg>
+              </span>
+
+              <span class="username">{{ site.twitter_username }}</span>
+            </a>
+          </li>
+          {% endif %}
+        </ul>
+      </div>
+
+      <div class="footer-col  footer-col-4">
+        <p class="text">{{ site.description }}</p>
+      </div>
+    </div>
+
+  </div>
+
+</footer>
diff --git a/_includes/head.html b/_includes/head.html
new file mode 100644 (file)
index 0000000..f8155ad
--- /dev/null
@@ -0,0 +1,12 @@
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <meta name="viewport" content="width=device-width initial-scale=1">
+
+  <title>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
+  <meta name="description" content="{% if page.excerpt %}{{ page.excerpt | strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description }}{% endif %}">
+
+  <link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
+  <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl | prepend: site.url }}">
+  <link rel="stylesheet" href="{{ "/static/leaflet-0.7.3/leaflet.css" | prepend: site.baseurl }}" />
+</head>
diff --git a/_includes/header.html b/_includes/header.html
new file mode 100644 (file)
index 0000000..3ec2c2c
--- /dev/null
@@ -0,0 +1,9 @@
+<header class="site-header">
+
+  <div class="wrapper">
+
+    <a class="site-title" href="{{ site.baseurl }}/">{{ site.title }}</a>
+
+  </div>
+
+</header>
diff --git a/_layouts/default.html b/_layouts/default.html
new file mode 100644 (file)
index 0000000..e4ab96f
--- /dev/null
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<html>
+
+  {% include head.html %}
+
+  <body>
+
+    {% include header.html %}
+
+    <div class="page-content">
+      <div class="wrapper">
+        {{ content }}
+      </div>
+    </div>
+
+    {% include footer.html %}
+
+  </body>
+
+</html>
diff --git a/_layouts/page.html b/_layouts/page.html
new file mode 100644 (file)
index 0000000..74c1a11
--- /dev/null
@@ -0,0 +1,14 @@
+---
+layout: default
+---
+<div class="post">
+
+  <header class="post-header">
+    <h1 class="post-title">{{ page.title }}</h1>
+  </header>
+
+  <article class="post-content">
+    {{ content }}
+  </article>
+
+</div>
diff --git a/_sass/_base.scss b/_sass/_base.scss
new file mode 100644 (file)
index 0000000..e5fd0fd
--- /dev/null
@@ -0,0 +1,204 @@
+/**
+ * Reset some basic elements
+ */
+body, h1, h2, h3, h4, h5, h6,
+p, blockquote, pre, hr,
+dl, dd, ol, ul, figure {
+    margin: 0;
+    padding: 0;
+}
+
+
+
+/**
+ * Basic styling
+ */
+body {
+    font-family: $base-font-family;
+    font-size: $base-font-size;
+    line-height: $base-line-height;
+    font-weight: 300;
+    color: $text-color;
+    background-color: $background-color;
+    -webkit-text-size-adjust: 100%;
+}
+
+
+
+/**
+ * Set `margin-bottom` to maintain vertical rhythm
+ */
+h1, h2, h3, h4, h5, h6,
+p, blockquote, pre,
+ul, ol, dl, figure,
+%vertical-rhythm {
+    margin-bottom: $spacing-unit / 2;
+}
+
+
+
+/**
+ * Images
+ */
+img {
+    max-width: 100%;
+    vertical-align: middle;
+}
+
+
+
+/**
+ * Figures
+ */
+figure > img {
+    display: block;
+}
+
+figcaption {
+    font-size: $small-font-size;
+}
+
+
+
+/**
+ * Lists
+ */
+ul, ol {
+    margin-left: $spacing-unit;
+}
+
+li {
+    > ul,
+    > ol {
+         margin-bottom: 0;
+    }
+}
+
+
+
+/**
+ * Headings
+ */
+h1, h2, h3, h4, h5, h6 {
+    font-weight: 300;
+}
+
+
+
+/**
+ * Links
+ */
+a {
+    color: $brand-color;
+    text-decoration: none;
+
+    &:visited {
+        color: darken($brand-color, 15%);
+    }
+
+    &:hover {
+        color: $text-color;
+        text-decoration: underline;
+    }
+}
+
+
+
+/**
+ * Blockquotes
+ */
+blockquote {
+    color: $grey-color;
+    border-left: 4px solid $grey-color-light;
+    padding-left: $spacing-unit / 2;
+    font-size: 18px;
+    letter-spacing: -1px;
+    font-style: italic;
+
+    > :last-child {
+        margin-bottom: 0;
+    }
+}
+
+
+
+/**
+ * Code formatting
+ */
+pre,
+code {
+    font-size: 15px;
+    border: 1px solid $grey-color-light;
+    border-radius: 3px;
+    background-color: #eef;
+}
+
+code {
+    padding: 1px 5px;
+}
+
+pre {
+    padding: 8px 12px;
+    overflow-x: scroll;
+
+    > code {
+        border: 0;
+        padding-right: 0;
+        padding-left: 0;
+    }
+}
+
+
+
+/**
+ * Wrapper
+ */
+.wrapper {
+    max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit} * 2));
+    max-width:         calc(#{$content-width} - (#{$spacing-unit} * 2));
+    margin-right: auto;
+    margin-left: auto;
+    padding-right: $spacing-unit;
+    padding-left: $spacing-unit;
+    @extend %clearfix;
+
+    @include media-query($on-laptop) {
+        max-width: -webkit-calc(#{$content-width} - (#{$spacing-unit}));
+        max-width:         calc(#{$content-width} - (#{$spacing-unit}));
+        padding-right: $spacing-unit / 2;
+        padding-left: $spacing-unit / 2;
+    }
+}
+
+
+
+/**
+ * Clearfix
+ */
+%clearfix {
+
+    &:after {
+        content: "";
+        display: table;
+        clear: both;
+    }
+}
+
+
+
+/**
+ * Icons
+ */
+.icon {
+
+    > svg {
+        display: inline-block;
+        width: 16px;
+        height: 16px;
+        vertical-align: middle;
+
+        path {
+            fill: $grey-color;
+        }
+    }
+}
diff --git a/_sass/_layout.scss b/_sass/_layout.scss
new file mode 100644 (file)
index 0000000..2c4f76a
--- /dev/null
@@ -0,0 +1,236 @@
+/**
+ * Site header
+ */
+.site-header {
+    border-top: 5px solid $wisc-red;
+    border-bottom: 1px solid $wisc-gold;
+    min-height: 35px;
+
+    // Positioning context for the mobile navigation icon
+    position: relative;
+}
+
+.site-title {
+    font-size: 24px;
+    line-height: 35px;
+    letter-spacing: -1px;
+    margin-bottom: 0;
+    float: left;
+
+    &,
+    &:visited {
+        color: $grey-color-dark;
+    }
+}
+
+.site-nav {
+    float: right;
+    line-height: 56px;
+
+    .menu-icon {
+        display: none;
+    }
+
+    .page-link {
+        color: $text-color;
+        line-height: $base-line-height;
+
+        // Gaps between nav items, but not on the first one
+        &:not(:first-child) {
+            margin-left: 20px;
+        }
+    }
+
+    @include media-query($on-palm) {
+        position: absolute;
+        top: 9px;
+        right: 30px;
+        background-color: $background-color;
+        border: 1px solid $grey-color-light;
+        border-radius: 5px;
+        text-align: right;
+
+        .menu-icon {
+            display: block;
+            float: right;
+            width: 36px;
+            height: 26px;
+            line-height: 0;
+            padding-top: 10px;
+            text-align: center;
+
+            > svg {
+                width: 18px;
+                height: 15px;
+
+                path {
+                    fill: $grey-color-dark;
+                }
+            }
+        }
+
+        .trigger {
+            clear: both;
+            display: none;
+        }
+
+        &:hover .trigger {
+            display: block;
+            padding-bottom: 5px;
+        }
+
+        .page-link {
+            display: block;
+            padding: 5px 10px;
+        }
+    }
+}
+
+
+
+/**
+ * Site footer
+ */
+.site-footer {
+    border-top: 1px solid $grey-color-light;
+    padding: $spacing-unit 0;
+}
+
+.footer-heading {
+    font-size: 18px;
+    margin-bottom: $spacing-unit / 2;
+}
+
+.contact-list,
+.social-media-list {
+    list-style: none;
+    margin-left: 0;
+}
+
+.footer-col-wrapper {
+    font-size: 12px;
+    color: $grey-color;
+    margin-left: -$spacing-unit / 2;
+    @extend %clearfix;
+}
+
+.footer-col {
+    float: left;
+    margin-bottom: $spacing-unit / 2;
+    padding-left: $spacing-unit / 2;
+}
+
+.footer-col-1 {
+    width: -webkit-calc(35% - (#{$spacing-unit} / 2));
+    width:         calc(35% - (#{$spacing-unit} / 2));
+}
+
+.footer-col-2 {
+    width: -webkit-calc(20% - (#{$spacing-unit} / 2));
+    width:         calc(20% - (#{$spacing-unit} / 2));
+}
+
+.footer-col-3 {
+    width: -webkit-calc(45% - (#{$spacing-unit} / 2));
+    width:         calc(45% - (#{$spacing-unit} / 2));
+}
+
+@include media-query($on-laptop) {
+    .footer-col-1,
+    .footer-col-2 {
+        width: -webkit-calc(50% - (#{$spacing-unit} / 2));
+        width:         calc(50% - (#{$spacing-unit} / 2));
+    }
+
+    .footer-col-3 {
+        width: -webkit-calc(100% - (#{$spacing-unit} / 2));
+        width:         calc(100% - (#{$spacing-unit} / 2));
+    }
+}
+
+@include media-query($on-palm) {
+    .footer-col {
+        float: none;
+        width: -webkit-calc(100% - (#{$spacing-unit} / 2));
+        width:         calc(100% - (#{$spacing-unit} / 2));
+    }
+}
+
+
+
+/**
+ * Page content
+ */
+.page-content {
+    padding: $spacing-unit 0;
+}
+
+.page-heading {
+    font-size: 20px;
+}
+
+.post-list {
+    margin-left: 0;
+    list-style: none;
+
+    > li {
+        margin-bottom: $spacing-unit;
+    }
+}
+
+.post-meta {
+    font-size: $small-font-size;
+    color: $grey-color;
+}
+
+.post-link {
+    display: block;
+    font-size: 24px;
+}
+
+
+
+/**
+ * Posts
+ */
+.post-header {
+    margin-bottom: $spacing-unit;
+}
+
+.post-title {
+    font-size: 42px;
+    letter-spacing: -1px;
+    line-height: 1;
+
+    @include media-query($on-laptop) {
+        font-size: 36px;
+    }
+}
+
+.post-content {
+    margin-bottom: $spacing-unit;
+
+    h2 {
+        font-size: 32px;
+
+        @include media-query($on-laptop) {
+            font-size: 28px;
+        }
+    }
+
+    h3 {
+        font-size: 26px;
+
+        @include media-query($on-laptop) {
+            font-size: 22px;
+        }
+    }
+
+    h4 {
+        font-size: 20px;
+
+        @include media-query($on-laptop) {
+            font-size: 18px;
+        }
+    }
+}
diff --git a/_sass/_syntax-highlighting.scss b/_sass/_syntax-highlighting.scss
new file mode 100644 (file)
index 0000000..e36627d
--- /dev/null
@@ -0,0 +1,67 @@
+/**
+ * Syntax highlighting styles
+ */
+.highlight {
+    background: #fff;
+    @extend %vertical-rhythm;
+
+    .c     { color: #998; font-style: italic } // Comment
+    .err   { color: #a61717; background-color: #e3d2d2 } // Error
+    .k     { font-weight: bold } // Keyword
+    .o     { font-weight: bold } // Operator
+    .cm    { color: #998; font-style: italic } // Comment.Multiline
+    .cp    { color: #999; font-weight: bold } // Comment.Preproc
+    .c1    { color: #998; font-style: italic } // Comment.Single
+    .cs    { color: #999; font-weight: bold; font-style: italic } // Comment.Special
+    .gd    { color: #000; background-color: #fdd } // Generic.Deleted
+    .gd .x { color: #000; background-color: #faa } // Generic.Deleted.Specific
+    .ge    { font-style: italic } // Generic.Emph
+    .gr    { color: #a00 } // Generic.Error
+    .gh    { color: #999 } // Generic.Heading
+    .gi    { color: #000; background-color: #dfd } // Generic.Inserted
+    .gi .x { color: #000; background-color: #afa } // Generic.Inserted.Specific
+    .go    { color: #888 } // Generic.Output
+    .gp    { color: #555 } // Generic.Prompt
+    .gs    { font-weight: bold } // Generic.Strong
+    .gu    { color: #aaa } // Generic.Subheading
+    .gt    { color: #a00 } // Generic.Traceback
+    .kc    { font-weight: bold } // Keyword.Constant
+    .kd    { font-weight: bold } // Keyword.Declaration
+    .kp    { font-weight: bold } // Keyword.Pseudo
+    .kr    { font-weight: bold } // Keyword.Reserved
+    .kt    { color: #458; font-weight: bold } // Keyword.Type
+    .m     { color: #099 } // Literal.Number
+    .s     { color: #d14 } // Literal.String
+    .na    { color: #008080 } // Name.Attribute
+    .nb    { color: #0086B3 } // Name.Builtin
+    .nc    { color: #458; font-weight: bold } // Name.Class
+    .no    { color: #008080 } // Name.Constant
+    .ni    { color: #800080 } // Name.Entity
+    .ne    { color: #900; font-weight: bold } // Name.Exception
+    .nf    { color: #900; font-weight: bold } // Name.Function
+    .nn    { color: #555 } // Name.Namespace
+    .nt    { color: #000080 } // Name.Tag
+    .nv    { color: #008080 } // Name.Variable
+    .ow    { font-weight: bold } // Operator.Word
+    .w     { color: #bbb } // Text.Whitespace
+    .mf    { color: #099 } // Literal.Number.Float
+    .mh    { color: #099 } // Literal.Number.Hex
+    .mi    { color: #099 } // Literal.Number.Integer
+    .mo    { color: #099 } // Literal.Number.Oct
+    .sb    { color: #d14 } // Literal.String.Backtick
+    .sc    { color: #d14 } // Literal.String.Char
+    .sd    { color: #d14 } // Literal.String.Doc
+    .s2    { color: #d14 } // Literal.String.Double
+    .se    { color: #d14 } // Literal.String.Escape
+    .sh    { color: #d14 } // Literal.String.Heredoc
+    .si    { color: #d14 } // Literal.String.Interpol
+    .sx    { color: #d14 } // Literal.String.Other
+    .sr    { color: #009926 } // Literal.String.Regex
+    .s1    { color: #d14 } // Literal.String.Single
+    .ss    { color: #990073 } // Literal.String.Symbol
+    .bp    { color: #999 } // Name.Builtin.Pseudo
+    .vc    { color: #008080 } // Name.Variable.Class
+    .vg    { color: #008080 } // Name.Variable.Global
+    .vi    { color: #008080 } // Name.Variable.Instance
+    .il    { color: #099 } // Literal.Number.Integer.Long
+}
diff --git a/compressed_log.txt b/compressed_log.txt
new file mode 100644 (file)
index 0000000..d4732d6
--- /dev/null
@@ -0,0 +1,1029 @@
+commit bff35b56bd28e9b8ff08f9f6d7ea8216aa0cc616
+Author: Ethan Nelson <git@ethan-nelson.com>
+Date:   Sat Feb 25 15:18:18 2017 -0600
+
+    Update vendor loc in head
+
+commit ac72065e2f62501f830073e11197b715927ca2f1
+Author: Ethan Nelson <git@ethan-nelson.com>
+Date:   Thu Feb 23 15:16:42 2017 -0600
+
+    Add license, update readme
+
+commit 8af8b40f2b903f3186fb830cdbb404ead45ad6f4
+Author: Ethan Nelson <git@ethan-nelson.com>
+Date:   Thu Feb 23 14:54:02 2017 -0600
+
+    Update site config
+
+commit 5657cebd6b30c688ab1cc7adf3db6ca5f7b9df29
+Author: Ethan Nelson <git@ethan-nelson.com>
+Date:   Fri Feb 17 00:03:31 2017 -0600
+
+    Final js refactor of evening
+
+commit cfa561300be75cfa8371e39cbffa834654e40eb6
+Author: Ethan Nelson <git@ethan-nelson.com>
+Date:   Thu Feb 16 23:01:32 2017 -0600
+
+    Further js refactoring
+
+commit ff79026bbbb5d51e44fc0bf6e1a7127989a0acde
+Author: Ethan Nelson <git@ethan-nelson.com>
+Date:   Thu Feb 16 22:39:00 2017 -0600
+
+    Remove deprecated function arg
+
+commit bef834e5b54c0150a96c2816b34c444573904bba
+Author: Ethan Nelson <git@ethan-nelson.com>
+Date:   Thu Feb 16 22:31:20 2017 -0600
+
+    Continue js refactor
+
+commit ea8c15df0b91f0f3f7cec71d86929b61ce277e79
+Author: Ethan Nelson <git@ethan-nelson.com>
+Date:   Thu Feb 16 20:48:59 2017 -0600
+
+    Start js refactor
+
+commit 1a66ea489523b74edab29b511c350c233eac4605
+Author: Ethan Nelson <git@ethan-nelson.com>
+Date:   Thu Feb 16 20:48:40 2017 -0600
+
+    Remove xml feed
+
+commit d35674877171481828687db0ef5f1677c29da3fb
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Tue Mar 8 21:28:21 2016 -0600
+
+    update lat case
+
+commit 639ec54680263cc907ef60e6c58a000048d54723
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Tue Mar 8 21:23:17 2016 -0600
+
+    add more freq labels
+
+commit da79e021afed8c3ed73f0138cf8aba711862793f
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Tue Mar 8 21:21:11 2016 -0600
+
+    default rain layer
+
+commit 1b53637c64a87ea5df8e2c8e401ef0342dcca9a6
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Tue Mar 8 21:18:52 2016 -0600
+
+    add freq labels
+
+commit f2a6a661192b5d221e704af5688a50c171e41f18
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Tue Mar 8 21:17:19 2016 -0600
+
+    change case sliders
+
+commit 0d0062291e05d8dd6956e54b7b65d3d190b908f2
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sun Feb 14 19:59:32 2016 -0600
+
+    Expand vertical levels
+
+commit e50bf6e0407313dd907ff33943bb86d20fabe37a
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 13 15:23:45 2016 -0600
+
+    Add case buttons
+
+commit a8b5945c70cfbc794ee585cb509c959ebab671f0
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 13 12:47:03 2016 -0600
+
+    Show initial values
+
+commit 8c2781ef09ebfe26e89f0ff668542a1283ae88c4
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 13 11:53:08 2016 -0600
+
+    Update button text
+
+commit 330aee6c25ed80b788e05251d0df153cbcf38a7e
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Mar 4 11:51:09 2015 -0600
+
+    Update _config.yml
+
+commit 5e39bd40f53c5ddd3c3833a0324772e822d5c7fa
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Mar 4 11:49:17 2015 -0600
+
+    Update _layout.scss
+
+commit 14e896958ddb75288bf29515c53cd6af064f5a53
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Mar 4 11:46:29 2015 -0600
+
+    including footer
+
+commit 98503b79fb18e2895cee27ec0c5bb9ff498f6526
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Mar 4 11:45:43 2015 -0600
+
+    Update _config.yml
+
+commit 5f40df5e89e71c4a1cda27f786b4617190a8f449
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Mar 4 11:44:55 2015 -0600
+
+    Add footer template
+
+commit a16390f28110dab31e623d5199637e21897ff666
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Tue Feb 24 12:27:17 2015 -0600
+
+    changing button text
+
+commit c964647b3f93c15e605382b0ce98cc6f63e23fc1
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Tue Feb 24 11:11:59 2015 -0600
+
+    reducing orbits to image bounds
+
+commit 87684b446e353362243ffc6ec9bdd01a77534e43
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 23 18:55:03 2015 -0600
+
+    final image changes
+
+commit 006c4399fc71901bd2b632b7aa47f152265dd0a1
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 23 18:48:19 2015 -0600
+
+    Revert "correcting directory for lon"
+    
+    This reverts commit fd4ae24aa09118aebf4a299ddd5d1b14e03f9dcd.
+
+commit 673172fe11c81e6bd773b8274e851033fb5374a9
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 23 18:45:52 2015 -0600
+
+    correcting directory for lon
+
+commit a6db72eb1b2133287507410c263aac3ab447c4c7
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 23 18:41:14 2015 -0600
+
+    finishing figures
+    
+    changing projection and zoom levels
+
+commit b105cfcdf2e14dd5bd8a90861c4bfd16e30d10a2
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sun Feb 22 13:25:19 2015 -0600
+
+    including orbit coords
+
+commit 45ed7f5d5b48060612c61dfc3be0fc3f6c41fdcb
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Sun Feb 22 00:14:33 2015 -0600
+
+    adding longitude orbit coordinates
+
+commit 724eb818fa5e0029160e0bf19e4295e60178cf40
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Sun Feb 22 00:06:09 2015 -0600
+
+    adding latitude slice coordinates
+
+commit 2dbc03e6d136a12e738b3dea023b91c8ad38edde
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 21 23:53:21 2015 -0600
+
+    starting coordinate file for orbits
+
+commit 1c3bba2fc5ecabb178ad1f714230cf350bb4cf6b
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 21 23:40:14 2015 -0600
+
+    testing exponent frm
+
+commit f156015c28120a02affe6ba9986b50cdc2506061
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 21 22:53:55 2015 -0600
+
+    fixing stemp transparency
+
+commit 2dc9258d055666fae79bb52499deafc0d2d46c56
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 21 22:50:30 2015 -0600
+
+    adding new layers
+
+commit 3e430a6aa05f561773793de3c2e03602573ee273
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 21 22:49:13 2015 -0600
+
+    updating ignore file
+
+commit ac8d8084549b9d5b3ed5972de1eb5113ae431438
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 21 21:44:19 2015 -0600
+
+    Update index.html
+
+commit 9e1d1f111845d865c26db4b32a0b2db0d1e02f2e
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 21 21:18:20 2015 -0600
+
+    adjusting coords for new cross sections
+
+commit e1ce8a74649cff062f39aaf822ab9e10062f4e94
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Feb 20 16:49:39 2015 -0600
+
+    increasing map coverage/attribution
+
+commit d6c0d9cf10681b7410966fb6d81fe5fea8b6d389
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Feb 18 22:31:34 2015 -0600
+
+    Update index.html
+
+commit ef7c9b41204a3e821ef9091b4a0cbc1d36196971
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Wed Feb 18 22:28:24 2015 -0600
+
+    updating map tiles for better zoom
+
+commit c7456e0441bef89e70385f742d23868c798b8886
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Tue Feb 17 11:41:00 2015 -0600
+
+    increasing zoom
+
+commit b91bdbe0d7a11bfe04c00fbb3888a971d607d994
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 16 16:11:28 2015 -0600
+
+    increasing size of lat/lon windows
+
+commit 1c3600de183643f4be582528e306c1f3236c15ac
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 16 16:09:47 2015 -0600
+
+    fixing more axes
+
+commit ea88f061bb538f8b1529058e0b7c9e613166964b
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 16 15:48:56 2015 -0600
+
+    fixing slice axes
+
+commit 62518fe02a5f0dd97ca8060f0cf934b5918f7d97
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 16 15:30:02 2015 -0600
+
+    adding final ratio plots
+
+commit d9103d2e3aa0b913d1b77670c42f6ee4250c0833
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 16 15:28:39 2015 -0600
+
+    adding mixing ratio plots
+
+commit 807c9a05d626c85e1977d8812ff62d93a48c1072
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 16 15:21:53 2015 -0600
+
+    fixing mixing ratio urls
+
+commit cf3980e44beadd63df147a5d9d59523426c8624f
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 16 15:07:30 2015 -0600
+
+    adding first vertical mixing ratios
+
+commit 10b7df4976928b1bc381b62342649263efbb0731
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 14 15:52:28 2015 -0600
+
+    adding lat lon labels
+
+commit 51fdd6b92b91e4ad41f52ccedc58cd9ed2fc214f
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sat Feb 14 15:43:24 2015 -0600
+
+    spacing
+
+commit ee95e2a154c151d5c27832be61a307211ddd6ce5
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Thu Feb 12 21:45:06 2015 -0600
+
+    clarifying MDR label
+
+commit 907ff582146bbe899f2df5c3f271750dbc8038d6
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Thu Feb 12 21:21:42 2015 -0600
+
+    defaulting MDR to lower values
+
+commit cfad1125068b5689a7f1d4b16d96a14618e262c0
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Tue Feb 3 16:56:42 2015 -0600
+
+    adding orbits
+
+commit 7964788b5f9de468151f27207c75a20f574d995a
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 2 13:59:01 2015 -0600
+
+    adjusting preload more
+
+commit 4063b656c1591dd95f87a60f9415dd9122fb0bde
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 2 13:57:32 2015 -0600
+
+    adjusting preload
+
+commit c51115893b8d418d6877633dea71eaada112513e
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Feb 2 13:52:58 2015 -0600
+
+    adding mixing ratio legends
+
+commit c3713d6ace0a6372128a86471e40ef4d0d6425da
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Sun Feb 1 21:27:09 2015 -0600
+
+    fixing unnecessary loads
+
+commit 7707966b78b4ffae3d945352d6a9ad7fcb995ebf
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sun Feb 1 21:19:57 2015 -0600
+
+    adding new lon
+
+commit 655a697b250ee8e0517687f22d388862cbae1785
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sun Feb 1 18:05:24 2015 -0600
+
+    new vert cs, phase imgs
+
+commit 034d3bf5a2b64cc42df24498c80079aea2a77c27
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Fri Jan 30 12:43:40 2015 -0600
+
+    minor js changes
+
+commit c99805242159cd47a5fe030b1b9394be5173a8f4
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Fri Jan 30 12:38:16 2015 -0600
+
+    temp legend more
+
+commit 1607f021bd07915a9c14bc03b83db31b1faa7ad7
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Fri Jan 30 12:30:31 2015 -0600
+
+    temp legend
+
+commit 5e4400bbfb1cd4c775830093347e1dd20721a75a
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Fri Jan 30 10:46:43 2015 -0600
+
+    more legend fixes
+
+commit 3d1b544af0761292d01574ffcc1f2d06e81cebbc
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Fri Jan 30 10:42:40 2015 -0600
+
+    fixing legends
+
+commit 3b465806a93937e35f343975eda82ea632fd905f
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Fri Jan 30 10:39:27 2015 -0600
+
+    adding legends
+
+commit 09f70977f9b24b296a44c0719ead62460e13f868
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Thu Jan 29 22:23:12 2015 -0600
+
+    adding features
+
+commit 65df0e650ff85683faa202135f98c41670357976
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Thu Jan 29 20:53:07 2015 -0600
+
+    various fixes
+
+commit 923242752d7c709991441238455790dd8519535e
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Thu Jan 29 17:56:40 2015 -0600
+
+    slice fixes
+
+commit 1e784db04167bdb0e6155303622a77c397dd3d88
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Thu Jan 29 15:47:05 2015 -0600
+
+    fixing mdr refresh
+
+commit ddcc3d93313ad09b993a868e654926e82bf9c48a
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Thu Jan 29 15:08:52 2015 -0600
+
+    initial slices
+
+commit 11052f04c6b1966691eab11927fa68dd6f518eee
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Tue Jan 27 00:13:27 2015 -0600
+
+    adjusting layer opacity
+
+commit 09864d9fb770c1e3e2848270702b4597da8e3b7c
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Mon Jan 26 22:21:46 2015 -0600
+
+    converting atten to mdr
+
+commit d249cc4f40182259ef33fed89dd5bf0dc247f43e
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Mon Jan 26 20:16:59 2015 -0600
+
+    fixing z layers
+
+commit 54d8d5e86ce82f5868eb31fa8dca936b715b522b
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 17:17:49 2015 -0600
+
+    minor fixe
+
+commit 0e7ddf47f5ef5eb3bf39638548a705d4a470fd26
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 17:00:04 2015 -0600
+
+    providing map turnoff
+
+commit adc442e89aff1b9b2f4efd88c13e91c3e65121b6
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 16:30:09 2015 -0600
+
+    fixed single overlay
+
+commit d9ae2f42f1a9f8b4fe46132d8bd807fb7371ed6b
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 16:25:14 2015 -0600
+
+    layers edits
+
+commit 2f6be8d23e883771f8e5f781edcaa1d8b028a968
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 16:01:59 2015 -0600
+
+    debugging
+
+commit ec62a2ae95fc41ad4c6382e8d3e630f374ae3d41
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 15:53:38 2015 -0600
+
+    fixing layer transition
+
+commit 1ecef81b628083071c2b743604738ae5e4a2def3
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 15:50:11 2015 -0600
+
+    fixing layer transition
+
+commit 53f20484b49db5980780c1ef46de9f8a5ff110a3
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 15:42:12 2015 -0600
+
+    fixing layers
+
+commit 16cc1120cec62db17b9b49aae548bdfb6f3e73dc
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 15:32:45 2015 -0600
+
+    preventing double layers
+
+commit d0e216163f612bd40027932d70f8ad5f55b17c7b
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 15:29:04 2015 -0600
+
+    adjusting legend controls
+
+commit 6162cdbd76bee91f1e20bbfd28f661bd1a2958cd
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 15:24:38 2015 -0600
+
+    adjusting legend control
+
+commit 897901fb007e0e03a3d905378353f122bc7f376f
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 15:14:14 2015 -0600
+
+    reverting layer control
+
+commit 3169f819cc3af0122b18af5c1d3608f79d84c744
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 15:02:31 2015 -0600
+
+    more minor fixes
+
+commit 2db80b893dbc296f42747941463a993c1da783c7
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 15:00:16 2015 -0600
+
+    addl minor fixes
+
+commit c17a068d63ed6d2c1eeb131276eaf7a1eef2dbd7
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:58:36 2015 -0600
+
+    more minor fixes
+
+commit f44ddca033f72af3e681eb09db123a12c65cbd38
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:57:09 2015 -0600
+
+    more minor fixes
+
+commit ca4e18ccead9ea41d46a61d3aa6859f9cf6c1be0
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:55:02 2015 -0600
+
+    more minor fixes
+
+commit 238a9a2f366ee45e215f0a08b9bdd0a7f920f2be
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:53:10 2015 -0600
+
+    more minor fixes
+
+commit a3a6533ebe278e0687bbf3c5231707a2600f891d
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:43:14 2015 -0600
+
+    minor fixex
+
+commit 3e6c1211a2967fe2ac2df22e39679a467da16ca4
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:40:47 2015 -0600
+
+    minor fix
+
+commit 60b5142275fc7760b1c604a57139772e076a769e
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:38:25 2015 -0600
+
+    legend edits
+
+commit af28dcca68c7b9b1b666c12864383205a22e36cc
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:22:34 2015 -0600
+
+    rearranging layers
+
+commit 14001f65343f97471e76717a2fd9be5adbe6c6f0
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:21:15 2015 -0600
+
+    rearranging layers
+
+commit af5b0e5ce090e32d84a96d168c5799f2b3dc8a24
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:12:38 2015 -0600
+
+    testing z-level control more
+
+commit f7ad4608ec295d052c5a303a5e1fc0de6e087e27
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:11:38 2015 -0600
+
+    testing z-level control
+
+commit a69c714cdfd929ee39593c02449fc6b0311cbcd6
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:03:16 2015 -0600
+
+    fixing stemp img
+
+commit 5a7fda0f951cd33237dcb615bce46dd1f495c097
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:02:30 2015 -0600
+
+    fixing stemp img
+
+commit 7fb2e391ab5f2a19e192349089f11b021c7ce8da
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 14:00:58 2015 -0600
+
+    testing stemp img
+
+commit 49f167c277839464032e910c6abfc86e02efa7eb
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Mon Jan 26 13:32:55 2015 -0600
+
+    testing swind img
+
+commit ae8712e06f0c712246cf8290571e8cd4524a89d6
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Jan 23 11:09:07 2015 -0600
+
+    adding information to README
+
+commit 838de8311fc14f346db78ff4b64b894f32dd3d2e
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Jan 23 10:51:02 2015 -0600
+
+    Update index.html
+
+commit d085ca2b28f4379c5a8ea1fb7e9d5b3ada224a95
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Jan 23 10:49:51 2015 -0600
+
+    adding new overlays to remember
+
+commit bc75c96b603bf3f0e49f9ec7faff5b6e0102b021
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Wed Jan 14 16:57:51 2015 -0600
+
+    cleanup
+
+commit 7bd4babe365f977eaed5a9925dd6b882eba43acf
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sun Dec 28 17:53:58 2014 -0600
+
+    adding user clickable images
+
+commit 8a2780d4dca369dafde25231ddc61c49a9500b79
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sun Dec 28 16:31:53 2014 -0600
+
+    cleaning up
+
+commit fcd40225baac3d654be0043b6c72b6b13c0e6fd3
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sun Dec 28 16:31:05 2014 -0600
+
+    cleaning up
+
+commit ea5fa8c2f7acfc6927a08e6f45cc9a2e14c1a4a9
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Sun Dec 28 16:29:40 2014 -0600
+
+    images trial
+
+commit 7571e3388d6a6c079b565e8f4ae7c03a90b9a5a3
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Sat Dec 27 00:32:14 2014 -0600
+
+    changing legend style
+
+commit 40ac923a76ee8985f7434433add4b4a047c77305
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Sat Dec 27 00:14:15 2014 -0600
+
+    legend background
+
+commit 123c0d837d4fd501514f5eafc83de5d8687593bb
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Sat Dec 27 00:06:36 2014 -0600
+
+    changing legend size
+
+commit cd90a095d591db7b649baac0634e4dfbd2ea3368
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Sat Dec 27 00:05:07 2014 -0600
+
+    fixing legend src
+
+commit dd639f1e199ab822122850a028bf222e34df3269
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Sat Dec 27 00:02:33 2014 -0600
+
+    adding legend
+
+commit 59bd884e8f0ac3e6632da58a2bcb9a70d6a4b56e
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Fri Dec 26 23:27:41 2014 -0600
+
+    updating rr
+
+commit 504dd4b2a03d1f32294c3516234f6f13dbd1695d
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 12 16:06:25 2014 -0600
+
+    adding image size in preloader
+
+commit 0216ba074d1835787eb48d3a99f2c298cd1c6eca
+Author: ethan-nelson <ethan.nelson@users.noreply.github.com>
+Date:   Fri Dec 12 15:59:22 2014 -0600
+
+    test images
+
+commit 76215d4e704042f9c7ecad228c3aeed91916a37e
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 12 15:17:00 2014 -0600
+
+    Update index.html
+
+commit 34c95da9eaa2f1f292b274095c2c23857bd4e6ac
+Author: Ethan Nelson <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 13:56:50 2014 -0600
+
+    adding lon init image
+
+commit 06b9e922230dba2b78f31e1677db5631f7f464dc
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 13:34:34 2014 -0600
+
+    preloading images
+
+commit 3c7c958085a5b303fcb672c71e44ed4c86620a92
+Author: Ethan Nelson <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 13:22:21 2014 -0600
+
+    correcting images
+
+commit 237d5142428be6394b3cbe588cb0a48565cd988f
+Author: Ethan Nelson <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 13:18:28 2014 -0600
+
+    adding test images
+
+commit 73c4ecb7e41570b49c158731bd62c958e43ce1a5
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 12:53:10 2014 -0600
+
+    Update index.html
+
+commit 708590eaa6265e27af58d38edb47f4ef9a96b353
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 12:51:48 2014 -0600
+
+    Update index.html
+
+commit 2070febbd05acac357f4235f844836a8d82b411f
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 12:50:47 2014 -0600
+
+    Update index.html
+
+commit 68acb02493033759637309d8c634381501e768ef
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 12:44:09 2014 -0600
+
+    adding frequency changes
+
+commit 99b72c93e4cad60b8ba14afdc71a179026be6fc5
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 10:55:58 2014 -0600
+
+    Update _config.yml
+
+commit 0a6e6c0c18f469eba0bf40958f7a5a0db324e45f
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 10:54:14 2014 -0600
+
+    Update index.html
+
+commit 018dc047ec6a1dc40d7f59f7796fcd18d504ac57
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 10:47:50 2014 -0600
+
+    Update index.html
+
+commit de84727d5444ecfc8625293dfbd6736597904cf8
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 10:47:17 2014 -0600
+
+    adding image refresh for lat/lon
+
+commit 9368099f450d48c2b6e053e7771c5f3b10ff98e7
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 10:42:34 2014 -0600
+
+    testing image refresh
+
+commit 11b767a0388fb8e793cdd795d6fc3ff4c7ef480d
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Wed Dec 10 10:31:33 2014 -0600
+
+    Update index.html
+
+commit 733782e00370624d61f3858dbce09cc0034caf14
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Sat Dec 6 22:58:56 2014 -0600
+
+    Update index.html
+
+commit 52a4d01256470ac10ef959f440ab63ba389e74fb
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 14:29:05 2014 -0600
+
+    Update index.html
+
+commit 21363dc49a6f3be2e8ad96824854003a160c4ec9
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 14:24:52 2014 -0600
+
+    Update index.html
+
+commit 6f4365b642de090fbc59df775207d0b19dfaa9cb
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 14:22:44 2014 -0600
+
+    Update index.html
+
+commit 3d07bc6564d0082d07707641903b036ce86047b6
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 14:20:42 2014 -0600
+
+    Update index.html
+
+commit 8caf31061ce3ef237c59ca20ee51358e9ec185d8
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 13:56:01 2014 -0600
+
+    Update index.html
+
+commit 5e05a843bb43b1ace78e456ac501f6e18de6f3f6
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 13:53:12 2014 -0600
+
+    Update index.html
+
+commit 79e8188ac3a63366f5fb328c6fda744c7979949a
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 13:50:35 2014 -0600
+
+    Update index.html
+
+commit 2ab3828c6a18b557b22cff6e1df5e95c62cb90e8
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 13:49:25 2014 -0600
+
+    adding frequency selectors
+
+commit ff51d2653578619451a8016cc79a9646814d4ca3
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 13:37:27 2014 -0600
+
+    updating image
+
+commit 467c53ad34295cdb7eb544c27882ec9894de1e85
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 13:30:06 2014 -0600
+
+    Update index.html
+
+commit b1397afff0c92d969238c324fdd39fd4850dd869
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:56:01 2014 -0600
+
+    Update index.html
+
+commit 24ce7386b4c78904ac5cace7e1a72b9037c09451
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:54:38 2014 -0600
+
+    Update index.html
+
+commit 57dd37b8b9c98670049da0d5af69a79b3019082d
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:51:13 2014 -0600
+
+    adding legend
+
+commit 4ca14ecee03cc2d9934edfaef1fa0f42a19811dc
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:39:33 2014 -0600
+
+    Update index.html
+
+commit e80b39a09b364dc30e8c9cae166939151c0c696a
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:37:52 2014 -0600
+
+    Update index.html
+
+commit 0f9f6f6c682c50db9add712f407b73df69b50d21
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:36:22 2014 -0600
+
+    Update index.html
+
+commit b298816f455bf3ef7dfbe2fd5d4b01fd88b09724
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:35:09 2014 -0600
+
+    Update index.html
+
+commit 873016c200203c6fc9960da75a82a8c9066aa904
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:33:47 2014 -0600
+
+    Update index.html
+
+commit 7c5813d52c538b39e336c1c410fcc96ea2f297c4
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:32:28 2014 -0600
+
+    Update index.html
+
+commit d561accb7fd26b2f2649e5e5e0c42901c2ece73c
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:26:00 2014 -0600
+
+    Update index.html
+
+commit 81fc68d178c6d919a64de27b1d7939e430f8ce8e
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 12:25:37 2014 -0600
+
+    adding layers
+
+commit 00499d4e7975ad9813d88f2b3fa339f92018d77d
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 11:54:42 2014 -0600
+
+    fixing attenuation bugs
+
+commit 9419136be9b175f4225bf1f1ca9e4a11f5a24052
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 11:52:20 2014 -0600
+
+    Update index.html
+
+commit 5e676100aaa66045140161164b5a1d7ba95ae7af
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 11:52:06 2014 -0600
+
+    Update index.html
+
+commit c4d33c60262b96038584eae421c325d8769d7edb
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 11:50:05 2014 -0600
+
+    Update index.html
+
+commit 259f1b8aa00db3d3874660abbeb3849f984b6011
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 11:26:42 2014 -0600
+
+    extra curly bracket
+
+commit ce35c167aaf2cf4c023353af14f150abf24dff3b
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 11:25:23 2014 -0600
+
+    Update index.html
+
+commit 42b09325d1f5545c0bad43308ce4d975408f8b5b
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 11:23:20 2014 -0600
+
+    Update index.html
+
+commit c4884dd0fdcc5c9d352a62f140afa3116218da40
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 10:19:45 2014 -0600
+
+    adding vertical cross section capability
+
+commit 7e3b0a62767b6f245b6ab21840399740f350a654
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 10:12:16 2014 -0600
+
+    Update index.html
+
+commit 7833b604ff8848fa008e9848b866eeb4c13ce556
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Fri Dec 5 10:09:49 2014 -0600
+
+    Update index.html
+
+commit b0e8323fe0bfe955c41d562dce843a97863553a4
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Thu Dec 4 20:07:37 2014 -0600
+
+    rearranging
+
+commit a46a9b0aa0a70ca30b0f2e403f7be3f0dcb12da8
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Thu Dec 4 19:59:56 2014 -0600
+
+    fixing config
+
+commit 5530523e8a21d3ddf1f037f20e9c981617fb484b
+Author: ethan-nelson <ethan-nelson@users.noreply.github.com>
+Date:   Thu Dec 4 19:54:39 2014 -0600
+
+    initial build
+
+commit 832698660c7c02604a7d961b40cdfd9b8c39afc0
+Author: Ethan <ethan-nelson@users.noreply.github.com>
+Date:   Thu Dec 4 13:20:10 2014 -0600
+
+    Initial commit
diff --git a/coords.js b/coords.js
new file mode 100644 (file)
index 0000000..f435854
--- /dev/null
+++ b/coords.js
@@ -0,0 +1,148 @@
+var lonarray = [
+[
+    [ 3.50E+01 , -9.25E+01 ],
+    [ 3.63E+01 , -9.26E+01 ],
+    [ 3.77E+01 , -9.27E+01 ],
+    [ 3.90E+01 , -9.28E+01 ],
+    [ 4.04E+01 , -9.29E+01 ],
+    [ 4.17E+01 , -9.31E+01 ],
+    [ 4.31E+01 , -9.32E+01 ],
+    [ 4.44E+01 , -9.33E+01 ],
+],
+[
+    [ 3.50E+01 , -9.14E+01 ],
+    [ 3.64E+01 , -9.14E+01 ],
+    [ 3.77E+01 , -9.15E+01 ],
+    [ 3.91E+01 , -9.16E+01 ],
+    [ 4.04E+01 , -9.17E+01 ],
+    [ 4.18E+01 , -9.18E+01 ],
+    [ 4.31E+01 , -9.19E+01 ],
+    [ 4.44E+01 , -9.21E+01 ],
+],
+[
+    [ 3.50E+01 , -8.99E+01 ],
+    [ 3.64E+01 , -9.00E+01 ],
+    [ 3.77E+01 , -9.01E+01 ],
+    [ 3.91E+01 , -9.01E+01 ],
+    [ 4.04E+01 , -9.02E+01 ],
+    [ 4.18E+01 , -9.03E+01 ],
+    [ 4.31E+01 , -9.04E+01 ],
+    [ 4.44E+01 , -9.04E+01 ],
+],
+[
+    [ 3.50E+01 , -8.79E+01 ],
+    [ 3.64E+01 , -8.79E+01 ],
+    [ 3.77E+01 , -8.79E+01 ],
+    [ 3.91E+01 , -8.79E+01 ],
+    [ 4.04E+01 , -8.80E+01 ],
+    [ 4.18E+01 , -8.80E+01 ],
+    [ 4.31E+01 , -8.80E+01 ],
+    [ 4.44E+01 , -8.81E+01 ],
+],
+[
+    [ 3.50E+01 , -8.61E+01 ],
+    [ 3.64E+01 , -8.61E+01 ],
+    [ 3.77E+01 , -8.61E+01 ],
+    [ 3.91E+01 , -8.61E+01 ],
+    [ 4.04E+01 , -8.61E+01 ],
+    [ 4.18E+01 , -8.61E+01 ],
+    [ 4.31E+01 , -8.61E+01 ],
+    [ 4.45E+01 , -8.61E+01 ],
+],
+[
+    [ 3.50E+01 , -8.46E+01 ],
+    [ 3.64E+01 , -8.46E+01 ],
+    [ 3.77E+01 , -8.46E+01 ],
+    [ 3.90E+01 , -8.45E+01 ],
+    [ 4.04E+01 , -8.45E+01 ],
+    [ 4.17E+01 , -8.45E+01 ],
+    [ 4.31E+01 , -8.44E+01 ],
+    [ 4.44E+01 , -8.44E+01 ],
+]
+];
+var latarray = [
+[
+    [ 3.54E+01, -1.00E+02 ],
+    [ 3.55E+01, -9.84E+01 ],
+    [ 3.57E+01, -9.67E+01 ],
+    [ 3.58E+01, -9.51E+01 ],
+    [ 3.59E+01, -9.34E+01 ],
+    [ 3.60E+01, -9.18E+01 ],
+    [ 3.61E+01, -9.01E+01 ],
+    [ 3.61E+01, -8.84E+01 ],
+    [ 3.61E+01, -8.68E+01 ],
+    [ 3.61E+01, -8.51E+01 ],
+    [ 3.61E+01, -8.34E+01 ],
+    [ 3.60E+01, -8.17E+01 ],
+    [ 3.59E+01, -8.01E+01 ],
+],
+[
+    [ 3.58E+01, -1.00E+02 ],
+    [ 3.60E+01, -9.83E+01 ],
+    [ 3.61E+01, -9.67E+01 ],
+    [ 3.63E+01, -9.50E+01 ],
+    [ 3.64E+01, -9.34E+01 ],
+    [ 3.65E+01, -9.17E+01 ],
+    [ 3.65E+01, -9.00E+01 ],
+    [ 3.66E+01, -8.83E+01 ],
+    [ 3.66E+01, -8.67E+01 ],
+    [ 3.66E+01, -8.50E+01 ],
+    [ 3.65E+01, -8.33E+01 ],
+    [ 3.65E+01, -8.16E+01 ],
+],
+[
+    [ 3.81E+01, -1.00E+02 ],
+    [ 3.83E+01, -9.83E+01 ],
+    [ 3.84E+01, -9.66E+01 ],
+    [ 3.86E+01, -9.49E+01 ],
+    [ 3.87E+01, -9.32E+01 ],
+    [ 3.87E+01, -9.14E+01 ],
+    [ 3.88E+01, -8.97E+01 ],
+    [ 3.88E+01, -8.80E+01 ],
+    [ 3.88E+01, -8.62E+01 ],
+    [ 3.88E+01, -8.45E+01 ],
+    [ 3.88E+01, -8.28E+01 ],
+    [ 3.87E+01, -8.11E+01 ],
+],
+[
+    [ 3.94E+01, -1.00E+02 ],
+    [ 3.96E+01, -9.83E+01 ],
+    [ 3.98E+01, -9.65E+01 ],
+    [ 3.99E+01, -9.48E+01 ],
+    [ 4.00E+01, -9.30E+01 ],
+    [ 4.01E+01, -9.13E+01 ],
+    [ 4.02E+01, -8.95E+01 ],
+    [ 4.02E+01, -8.78E+01 ],
+    [ 4.02E+01, -8.60E+01 ],
+    [ 4.02E+01, -8.42E+01 ],
+    [ 4.01E+01, -8.25E+01 ],
+    [ 4.01E+01, -8.07E+01 ],
+],
+[
+    [ 4.14E+01, -1.00E+02 ],
+    [ 4.16E+01, -9.82E+01 ],
+    [ 4.17E+01, -9.64E+01 ],
+    [ 4.19E+01, -9.46E+01 ],
+    [ 4.20E+01, -9.28E+01 ],
+    [ 4.21E+01, -9.10E+01 ],
+    [ 4.21E+01, -8.92E+01 ],
+    [ 4.21E+01, -8.74E+01 ],
+    [ 4.21E+01, -8.56E+01 ],
+    [ 4.21E+01, -8.38E+01 ],
+    [ 4.21E+01, -8.19E+01 ],
+    [ 4.20E+01, -8.01E+01 ],
+],
+[
+    [ 4.25E+01, -1.00E+02 ],
+    [ 4.27E+01, -9.82E+01 ],
+    [ 4.29E+01, -9.64E+01 ],
+    [ 4.30E+01, -9.46E+01 ],
+    [ 4.31E+01, -9.27E+01 ],
+    [ 4.32E+01, -9.09E+01 ],
+    [ 4.33E+01, -8.90E+01 ],
+    [ 4.33E+01, -8.72E+01 ],
+    [ 4.33E+01, -8.53E+01 ],
+    [ 4.33E+01, -8.35E+01 ],
+    [ 4.32E+01, -8.16E+01 ],
+]
+];
\ No newline at end of file
diff --git a/css/main.scss b/css/main.scss
new file mode 100755 (executable)
index 0000000..aaf9e13
--- /dev/null
@@ -0,0 +1,54 @@
+---
+# Only the main Sass file needs front matter (the dashes are enough)
+---
+@charset "utf-8";
+
+
+
+// Our variables
+$base-font-family: Helvetica, Arial, sans-serif;
+$base-font-size:   16px;
+$small-font-size:  $base-font-size * 0.875;
+$base-line-height: 1.5;
+
+$spacing-unit:     10px;
+
+$text-color:       #111;
+$background-color: #fdfdfd;
+$brand-color:      #2a7ae2;
+
+$grey-color:       #828282;
+$grey-color-light: lighten($grey-color, 40%);
+$grey-color-dark:  darken($grey-color, 25%);
+$wisc-red:         #b70101;
+$wisc-gold:        #E7D9C1;
+
+// Width of the content area
+$content-width:    900px;
+
+$on-palm:          600px;
+$on-laptop:        900px;
+
+
+
+// Using media queries with like this:
+// @include media-query($on-palm) {
+//     .wrapper {
+//         padding-right: $spacing-unit / 2;
+//         padding-left: $spacing-unit / 2;
+//     }
+// }
+@mixin media-query($device) {
+    @media screen and (max-width: $device) {
+        @content;
+    }
+}
+
+
+
+// Import partials from `sass_dir` (defaults to `_sass`)
+@import
+        "base",
+        "layout",
+        "syntax-highlighting"
+;
diff --git a/data/.gitkeep b/data/.gitkeep
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/data_init_download.sh b/data_init_download.sh
new file mode 100644 (file)
index 0000000..a2963af
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/bash
+# Note: these files are fairly substantial (750 MB - 1.25 GB a piece), so be wary of bandwidth and disk space
+
+# Base data directory
+mkdir -p data
+
+# Download data
+curl "https://lecuyer.aos.wisc.edu/radarlabviewerdata/MLAT-a-A-2009-04-10-030000-g2.h5" -o "data/MLAT-a-A-2009-04-10-030000-g2.h5"
+curl "https://lecuyer.aos.wisc.edu/radarlabviewerdata/quickbeam_w-MLAT-a-A-2009-04-10-030000-g2.h5" -o "data/quickbeam_w-MLAT-a-A-2009-04-10-030000-g2.h5"
+curl "https://lecuyer.aos.wisc.edu/radarlabviewerdata/quickbeam_ka-MLAT-a-A-2009-04-10-030000-g2.h5" -o "data/quickbeam_ka-MLAT-a-A-2009-04-10-030000-g2.h5"
+curl "https://lecuyer.aos.wisc.edu/radarlabviewerdata/quickbeam_ku-MLAT-a-A-2009-04-10-030000-g2.h5" -o "data/quickbeam_ku-MLAT-a-A-2009-04-10-030000-g2.h5"
+curl "https://lecuyer.aos.wisc.edu/radarlabviewerdata/quickbeam_s-MLAT-a-A-2009-04-10-030000-g2.h5" -o "data/quickbeam_s-MLAT-a-A-2009-04-10-030000-g2.h5"
diff --git a/generate_plots.py b/generate_plots.py
new file mode 100644 (file)
index 0000000..1e3f9e7
--- /dev/null
@@ -0,0 +1,286 @@
+# -*- coding: utf-8 -*-
+# (c) 2015 MIT License Ethan Nelson
+# * This code generates plots for the radar lab viewer at https://github.com/ethan-nelson/radarlabviewer/.
+# * Two functions are defined to help with consistent plotting, then data are loaded and sent to plotting.
+# * Note that the images directory structure should be created and the data files downloaded prior
+#   to running this (see repo for scripts).
+import matplotlib as mpl
+import matplotlib.pyplot as plt
+import netCDF4 as n
+import numpy as np
+import quickbeam
+
+
+def plot_cross_section(x, y, data, crange, prange, cmap, title, figname, plot=None):
+    """
+    Plot a cross section of data, either along a lat, lon, or height.
+    In addition, the data may be artifically degraded to simulate a
+    sensor with lower resolution. 
+
+    Inputs:
+    x - x coordinate
+    y - y coordinate
+    data - data to plot
+    crange - range of colormap to use
+    prange - range of values to actually plot
+    cmap - colormap
+    title - title to print
+    figname - figure file name
+    plot - type of plot
+    """
+    if plot not in ['lat','lon','hgt']:
+        raise Exception('Must specify whether this plot is across longitude (lon), latitude (lat), or height (hgt)')
+
+    if plot == 'hgt':
+        plt.figure(figsize=(10,7))
+        xtitle = 'Longitude'
+        ytitle = 'Latitude'
+        xlims = [np.nanmin(x),np.nanmax(x)]
+        ylims = [np.nanmin(y),np.nanmax(y)]
+    else:
+        plt.figure(figsize=(14,7))
+        if plot == 'lon':
+            xtitle = 'Latitude'
+            xlims = [35,45]
+        else:
+            xtitle = 'Longitude'
+            xlims = [-100,-80]
+        ytitle = 'Height'
+        ylims = [0,20]
+
+    # We mask or saturate data outside our range (important for different MDRs)
+    temp = np.copy(data)
+    temp[temp < crange[0]] = np.nan
+    temp[temp > crange[1]] = crange[1]
+    plt.pcolormesh(x, y, temp, vmin=prange[0], vmax=prange[1], cmap=cmap)
+    plt.title(title, fontsize=20)
+    plt.xlim(xlims)
+    plt.ylim(ylims)
+    plt.xlabel(xtitle, fontsize=18)
+    plt.ylabel(ytitle, fontsize=18)
+    plt.xticks(fontsize=18)
+    plt.yticks(fontsize=18)
+
+    # Save png version for web
+    plt.tight_layout()
+    plt.savefig('images/' + figname + '.png')
+    plt.close()
+    #if GENERATE_PUBLICATION_QUALITY == True:
+    #    if 'tif' in fig.canvas.get_supported_filetypes():
+    #        plt.savefig('figures/' + figname + '.tiff', format='tif', dpi=300)
+    #    elif 'eps' in fig.canvas.get_supported_filetypes():
+    #        plt.savefig('figures/' + figname + '.eps', format='eps', dpi=300)
+
+
+def plot_colorbar(colormap, vmin, vmax, pmin, label, figname, log=False, big=False):
+    """
+    Plot a colorbar separately. Data may be degraded, so
+    the plot takes into consideration the range of values
+    to label as well as the range of values to color.
+
+    Inputs
+    colormap - colormap object
+    vmin - minimum value to color
+    vmax - maximum value to color
+    pmin - minimum value to plot
+    label - label to print on plot
+    figname - filename
+    log - boolean for whether to plot on log scale
+    big - boolean for whether to magnify text
+    """
+    if vmin == pmin:
+        plot_cmap = plt.get_cmap(colormap)
+    else:
+        if colormap == 'rainbow':
+            cbcall = mpl.cm.rainbow
+        elif colormap == 'jet':
+            cbcall = mpl.cm.jet
+        else:
+            raise Exception('Given colormap does not match a defined call function in plot_colorbar')
+        cmap_start = int(float(vmin-pmin) / float(vmax-pmin) * 256)
+        lower_cmap = np.ones([cmap_start, 4])
+        upper_cmap = cbcall(range(cmap_start, 256))
+        combined_cmap = np.vstack((lower_cmap, upper_cmap))
+        plot_cmap = mpl.colors.ListedColormap(combined_cmap, '', 256)
+
+    fig=plt.figure(figsize=(2,8))
+    ax = fig.add_axes([0.05, 0.025, 0.3, 0.95])
+    norm = mpl.colors.Normalize(vmin=pmin, vmax=vmax)
+    if log == True:
+        cb = mpl.colorbar.ColorbarBase(ax, cmap=plot_cmap, norm=norm, orientation='vertical', ticks=range(-2,3))
+        cb.ax.set_yticklabels(['10$^{-2}\!$', '10$^{-1}\!$', '10$^{0}\!$', '10$^{1}\!$', '10$^{2}\!$'])
+    else:
+        cb = mpl.colorbar.ColorbarBase(ax, cmap=plot_cmap, norm=norm, orientation='vertical')
+    if big == True:
+        labelsize=30
+        ticksize=26
+    else:
+        labelsize=18
+        ticksize=14
+    cb.set_label(label, fontsize=labelsize)
+    cb.ax.tick_params(labelsize=ticksize)
+    plt.savefig('images/%s.png' % figname, transparent=True)
+    plt.close()
+
+
+# Define arrays and dictionaries of information as well as file names
+basedir = 'data/quickbeam_%s-MLAT-a-A-2009-04-10-030000-g2.h5'
+frequencies = ['S','Ku','Ka','W']
+frequency_values = {'Ku': '13','Ka': '35','W': '94','S': '10'}
+
+range_current = {'Ku': [18, 50], 'Ka': [12, 50], 'W': [-30, 50], 'S': [0, 50]}
+range_future = {'Ku': [0, 50], 'Ka': [0, 50], 'W': [-30, 50], 'S': [0, 50]}
+range_ref = [-30, 50]
+range_model = {'ice': [1E-4, 2], 'liquid': [1E-4, 2], 'tempk': [28, 90], 'pcprate': [0.01, 100]}
+model_title = {'ice': 'Ice Water Content', 'liquid': 'Liquid Water Content', 'tempk': 'Temperature', 'pcprate': 'Rainfall'}
+
+lon_sections = [229, 302, 361, 434, 507, 580]
+lon_sections = range(220,580)
+lon_sections = [329, 363, 406, 469, 522, 567]
+
+lat_sections = [313, 346, 395, 461, 524, 562]
+lat_sections = range(300,580)
+lat_sections = [313, 330, 414, 464, 536, 579]
+
+hgt_sections = [1.5, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12]
+
+model_read_variables = ['pcprate','rain','cloud','snow','hail','aggregates','graupel','pristine','ue','ve','lon','lat','z_coords','tempk','topo']
+model_variables = ['pcprate','lat','lon','ue','ve','z_coords','tempk','topo']
+model_plot_variables = ['liquid','ice']
+
+# Read in model data
+model_file = 'data/MLAT-a-A-2009-04-10-030000-g2.h5'
+model_file = n.Dataset(model_file, 'r')
+model_read_data = {variable: np.squeeze(model_file[variable][:]) for variable in model_read_variables}
+model_data = {variable: model_read_data[variable] for variable in model_variables}
+model_data['ice'] = np.nansum([model_read_data[variable] for variable in ['snow','hail','aggregates','graupel','pristine']], axis=0)
+model_data['liquid'] = np.nansum([model_read_data[variable] for variable in ['rain','cloud']], axis=0)
+model_data['heights'] = np.zeros(np.shape(model_data['ice']))
+for i in range(np.shape(model_data['heights'])[0]):
+    model_data['heights'][i,:,:] = model_data['topo'] + model_data['z_coords'][i]
+model_data['heights'] /= 1000.0
+temp = np.zeros(np.shape(model_data['ice']))
+for i in range(np.shape(model_data['heights'])[0]):
+    temp[i,:,:] = model_data['lat']
+model_data['lat'] = temp
+temp = np.zeros(np.shape(model_data['ice']))
+for i in range(np.shape(model_data['heights'])[0]):
+    temp[i,:,:] = model_data['lon']
+model_data['lon'] = temp
+model_data['tempk'] = (model_data['tempk'] - 273.15) * 1.8 + 32.0
+
+cmap = plt.get_cmap('jet')
+cmap.set_under('w')
+
+# Plot radar cross sections for each frequency
+for ifreq,frequency in enumerate(frequencies):
+    reftitle = '%s %s GHz Reflectivity' % (frequency, frequency_values[frequency])
+    refctitle = 'Reflectivity [dBZ]'
+    radar_data = quickbeam.read(basedir % frequency.lower(), 'Z_cor', 'lon', 'lat', 'hgt')
+
+    for isec,section in enumerate(lon_sections):
+        plot_cross_section(model_data['lat'][:,:,section], model_data['heights'][:,:,section], radar_data['Z_cor'][:,:,section], range_current[frequency], range_ref, cmap, reftitle, 'h/lon/%i/%i' % (isec,ifreq+1), 'lon')
+        plot_cross_section(model_data['lat'][:,:,section], model_data['heights'][:,:,section], radar_data['Z_cor'][:,:,section], range_future[frequency], range_ref, cmap, reftitle, 'l/lon/%i/%i' % (isec,ifreq+1),  'lon')
+
+    for isec,section in enumerate(lat_sections):
+        plot_cross_section(model_data['lon'][:,section,:], model_data['heights'][:,section,:], radar_data['Z_cor'][:,section,:], range_current[frequency], range_ref, cmap, reftitle, 'h/lat/%i/%i' % (isec,ifreq+1), 'lat')
+        plot_cross_section(model_data['lon'][:,section,:], model_data['heights'][:,section,:], radar_data['Z_cor'][:,section,:], range_future[frequency], range_ref, cmap, reftitle, 'l/lat/%i/%i' % (isec,ifreq+1), 'lat')
+
+    for isec,section in enumerate(hgt_sections):
+        shapes = np.shape(radar_data['lon'])
+        temp = np.zeros(shapes)
+        # We find nearest point to a given geometric height level
+        for i in range(shapes[0]):
+            for j in range(shapes[1]):
+                lev = np.argmin([np.abs(section - x) for x in model_data['heights'][:,i,j]])
+                temp[i,j] = radar_data['Z_cor'][lev,i,j]
+        plot_cross_section(radar_data['lon'], radar_data['lat'], temp, range_current[frequency], range_ref, cmap, reftitle, 'h/vert/%i/%i' % (isec,ifreq+1), 'hgt')
+        plot_cross_section(radar_data['lon'], radar_data['lat'], temp, range_future[frequency], range_ref, cmap, reftitle, 'l/vert/%i/%i' % (isec,ifreq+1), 'hgt')
+
+    plot_colorbar('jet', range_current[frequency][0], range_current[frequency][1], -30, 'Reflectivity [dBZ]', 'h/leg/%i' % (ifreq+1))
+    plot_colorbar('jet', range_future[frequency][0], range_future[frequency][1], -30, 'Reflectivity [dBZ]', 'l/leg/%i' % (ifreq+1))
+
+# Plot model cross sections
+for variable in model_plot_variables:
+    for isec,section in enumerate(lon_sections):
+        plot_cross_section(model_data['lat'][:,:,section], model_data['heights'][:,:,section], model_data[variable][:,:,section], range_model[variable], range_model[variable], cmap, model_title[variable], 'lon/%i/%s' % (isec, variable), 'lon')
+
+    for isec,section in enumerate(lat_sections):
+        plot_cross_section(model_data['lon'][:,section,:], model_data['heights'][:,section,:], model_data[variable][:,section,:], range_model[variable], range_model[variable], cmap, model_title[variable], 'lat/%i/%s' % (isec, variable), 'lat')
+
+    for isec,section in enumerate(hgt_sections):
+        shapes = np.shape(radar_data['lon'])
+        temp = np.zeros(shapes)
+        # We find nearest point to a given geometric height level
+        for i in range(shapes[0]):
+            for j in range(shapes[1]):
+                lev = np.argmin([np.abs(section - x) for x in model_data['heights'][:,i,j]])
+                temp[i,j] = model_data[variable][lev,i,j]
+        plot_cross_section(model_data['lon'][0,:,:], model_data['lat'][0,:,:], temp, range_model[variable], range_model[variable], cmap, model_title[variable], 'vert/%i/%s' % (isec, variable), 'hgt')
+
+    plot_colorbar('jet', range_model[variable][0], range_model[variable][1], range_model[variable][0], model_title[variable], 'leg/%s' % variable)
+
+# Write out orbits for map
+f = open('coords.js', 'w')
+f.write('var lonarray = [\n')
+for isec,section in enumerate(lon_sections):
+    f.write('[\n')
+    points_in = [(y,x) for x,y in zip(model_data['lon'][0,:,section], model_data['lat'][0,:,section]) if y >= 35.0 and y <= 45.0]
+    for points in points_in[::50]:
+        f.write('    [ %2.2E , %2.2E ],\n' % points)
+    f.write(']')
+    f.write(',\n') if isec != len(lat_sections)-1 else f.write('\n')
+f.write('];\nvar latarray = [\n')
+for isec,section in enumerate(lat_sections):
+    f.write('[\n')
+    points_in = [(y,x) for x,y in zip(model_data['lon'][0,section,:], model_data['lat'][0,section,:]) if x >= -100.0 and x <= -80.0]
+    for points in points_in[::50]:
+        f.write('    [ %2.2E, %2.2E ],\n' % points)
+    f.write(']')
+    f.write(',\n') if isec != len(lat_sections)-1 else f.write('\n')
+f.write('];')
+f.close()
+
+# Plot maps with their colorbars
+# Note these *must* take up the _whole_ file space to project them better onto the slippy map
+mapxlim = [np.nanmin(model_data['lon'][0,:,:]), np.nanmax(model_data['lon'][0,:,:])]
+mapylim = [np.nanmin(model_data['lat'][0,:,:]), np.nanmax(model_data['lat'][0,:,:])]
+fig = plt.figure()
+ax = plt.axes([0,0,1,1])
+plt.quiver(model_data['lon'][0,::50,::50], model_data['lat'][0,::50,::50], model_data['ue'][0,::50,::50], model_data['ve'][0,::50,::50])
+plt.xlim(mapxlim)
+plt.ylim(mapylim)
+plt.gca().get_xaxis().set_visible(False)
+plt.gca().get_yaxis().set_visible(False)
+plt.gca().axis('off')
+plt.savefig('images/swind.png', transparent=True, bbox_inches='tight', pad_inches=0)
+plt.close()
+
+fig = plt.figure()
+ax = plt.axes([0,0,1,1])
+plt.pcolor(model_data['lon'][0,:,:], model_data['lat'][0,:,:], model_data['tempk'][0,:,:], vmin=28, vmax=90)
+plt.xlim(mapxlim)
+plt.ylim(mapylim)
+plt.gca().get_xaxis().set_visible(False)
+plt.gca().get_yaxis().set_visible(False)
+plt.gca().axis('off')
+plt.savefig('images/stemp.png', transparent=True, bbox_inches='tight', pad_inches=0)
+plt.close()
+
+plot_colorbar('jet', 28, 90, 28, 'Temperature [F]', 'tlegend', big=True)
+
+cmap = plt.get_cmap('winter')
+cmap.set_under('w', alpha=0.0)
+
+fig = plt.figure()
+ax = plt.axes([0,0,1,1])
+plt.pcolor(model_data['lon'][0,:,:], model_data['lat'][0,:,:], np.log10(model_data['pcprate']), vmin=-2, vmax=2, cmap=cmap)
+plt.xlim(mapxlim)
+plt.ylim(mapylim)
+plt.gca().get_xaxis().set_visible(False)
+plt.gca().get_yaxis().set_visible(False)
+plt.gca().axis('off')
+plt.savefig('images/rr.png', transparent=True, bbox_inches='tight', pad_inches=0)
+plt.close()
+
+plot_colorbar('winter', -2, 2, -2, 'Rain Rate [mm/hr]', 'rlegend', log=True, big=True)
diff --git a/images/h/lat/0/0.png b/images/h/lat/0/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lat/0/0.png differ
diff --git a/images/h/lat/0/1.png b/images/h/lat/0/1.png
new file mode 100644 (file)
index 0000000..a3c1043
Binary files /dev/null and b/images/h/lat/0/1.png differ
diff --git a/images/h/lat/0/2.png b/images/h/lat/0/2.png
new file mode 100644 (file)
index 0000000..b71b85a
Binary files /dev/null and b/images/h/lat/0/2.png differ
diff --git a/images/h/lat/0/3.png b/images/h/lat/0/3.png
new file mode 100644 (file)
index 0000000..213bc97
Binary files /dev/null and b/images/h/lat/0/3.png differ
diff --git a/images/h/lat/0/4.png b/images/h/lat/0/4.png
new file mode 100644 (file)
index 0000000..8597fb5
Binary files /dev/null and b/images/h/lat/0/4.png differ
diff --git a/images/h/lat/1/0.png b/images/h/lat/1/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lat/1/0.png differ
diff --git a/images/h/lat/1/1.png b/images/h/lat/1/1.png
new file mode 100644 (file)
index 0000000..3ec6b7a
Binary files /dev/null and b/images/h/lat/1/1.png differ
diff --git a/images/h/lat/1/2.png b/images/h/lat/1/2.png
new file mode 100644 (file)
index 0000000..5f21e57
Binary files /dev/null and b/images/h/lat/1/2.png differ
diff --git a/images/h/lat/1/3.png b/images/h/lat/1/3.png
new file mode 100644 (file)
index 0000000..4fb90e3
Binary files /dev/null and b/images/h/lat/1/3.png differ
diff --git a/images/h/lat/1/4.png b/images/h/lat/1/4.png
new file mode 100644 (file)
index 0000000..005d8d3
Binary files /dev/null and b/images/h/lat/1/4.png differ
diff --git a/images/h/lat/2/0.png b/images/h/lat/2/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lat/2/0.png differ
diff --git a/images/h/lat/2/1.png b/images/h/lat/2/1.png
new file mode 100644 (file)
index 0000000..025d821
Binary files /dev/null and b/images/h/lat/2/1.png differ
diff --git a/images/h/lat/2/2.png b/images/h/lat/2/2.png
new file mode 100644 (file)
index 0000000..a137296
Binary files /dev/null and b/images/h/lat/2/2.png differ
diff --git a/images/h/lat/2/3.png b/images/h/lat/2/3.png
new file mode 100644 (file)
index 0000000..f8bd1c3
Binary files /dev/null and b/images/h/lat/2/3.png differ
diff --git a/images/h/lat/2/4.png b/images/h/lat/2/4.png
new file mode 100644 (file)
index 0000000..c415f6c
Binary files /dev/null and b/images/h/lat/2/4.png differ
diff --git a/images/h/lat/3/0.png b/images/h/lat/3/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lat/3/0.png differ
diff --git a/images/h/lat/3/1.png b/images/h/lat/3/1.png
new file mode 100644 (file)
index 0000000..31e0456
Binary files /dev/null and b/images/h/lat/3/1.png differ
diff --git a/images/h/lat/3/2.png b/images/h/lat/3/2.png
new file mode 100644 (file)
index 0000000..93d648f
Binary files /dev/null and b/images/h/lat/3/2.png differ
diff --git a/images/h/lat/3/3.png b/images/h/lat/3/3.png
new file mode 100644 (file)
index 0000000..4a64ed1
Binary files /dev/null and b/images/h/lat/3/3.png differ
diff --git a/images/h/lat/3/4.png b/images/h/lat/3/4.png
new file mode 100644 (file)
index 0000000..621457b
Binary files /dev/null and b/images/h/lat/3/4.png differ
diff --git a/images/h/lat/4/0.png b/images/h/lat/4/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lat/4/0.png differ
diff --git a/images/h/lat/4/1.png b/images/h/lat/4/1.png
new file mode 100644 (file)
index 0000000..4feabca
Binary files /dev/null and b/images/h/lat/4/1.png differ
diff --git a/images/h/lat/4/2.png b/images/h/lat/4/2.png
new file mode 100644 (file)
index 0000000..aad9bcd
Binary files /dev/null and b/images/h/lat/4/2.png differ
diff --git a/images/h/lat/4/3.png b/images/h/lat/4/3.png
new file mode 100644 (file)
index 0000000..39c024b
Binary files /dev/null and b/images/h/lat/4/3.png differ
diff --git a/images/h/lat/4/4.png b/images/h/lat/4/4.png
new file mode 100644 (file)
index 0000000..1062c44
Binary files /dev/null and b/images/h/lat/4/4.png differ
diff --git a/images/h/lat/5/0.png b/images/h/lat/5/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lat/5/0.png differ
diff --git a/images/h/lat/5/1.png b/images/h/lat/5/1.png
new file mode 100644 (file)
index 0000000..42a2b80
Binary files /dev/null and b/images/h/lat/5/1.png differ
diff --git a/images/h/lat/5/2.png b/images/h/lat/5/2.png
new file mode 100644 (file)
index 0000000..92a8ada
Binary files /dev/null and b/images/h/lat/5/2.png differ
diff --git a/images/h/lat/5/3.png b/images/h/lat/5/3.png
new file mode 100644 (file)
index 0000000..c9083b8
Binary files /dev/null and b/images/h/lat/5/3.png differ
diff --git a/images/h/lat/5/4.png b/images/h/lat/5/4.png
new file mode 100644 (file)
index 0000000..71238db
Binary files /dev/null and b/images/h/lat/5/4.png differ
diff --git a/images/h/leg/0.png b/images/h/leg/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/leg/0.png differ
diff --git a/images/h/leg/1.png b/images/h/leg/1.png
new file mode 100644 (file)
index 0000000..f44b17e
Binary files /dev/null and b/images/h/leg/1.png differ
diff --git a/images/h/leg/2.png b/images/h/leg/2.png
new file mode 100644 (file)
index 0000000..f8970b7
Binary files /dev/null and b/images/h/leg/2.png differ
diff --git a/images/h/leg/3.png b/images/h/leg/3.png
new file mode 100644 (file)
index 0000000..d05abda
Binary files /dev/null and b/images/h/leg/3.png differ
diff --git a/images/h/leg/4.png b/images/h/leg/4.png
new file mode 100644 (file)
index 0000000..557188f
Binary files /dev/null and b/images/h/leg/4.png differ
diff --git a/images/h/lon/0/0.png b/images/h/lon/0/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lon/0/0.png differ
diff --git a/images/h/lon/0/1.png b/images/h/lon/0/1.png
new file mode 100644 (file)
index 0000000..ed6cc34
Binary files /dev/null and b/images/h/lon/0/1.png differ
diff --git a/images/h/lon/0/2.png b/images/h/lon/0/2.png
new file mode 100644 (file)
index 0000000..8afc0f4
Binary files /dev/null and b/images/h/lon/0/2.png differ
diff --git a/images/h/lon/0/3.png b/images/h/lon/0/3.png
new file mode 100644 (file)
index 0000000..1981891
Binary files /dev/null and b/images/h/lon/0/3.png differ
diff --git a/images/h/lon/0/4.png b/images/h/lon/0/4.png
new file mode 100644 (file)
index 0000000..3da0239
Binary files /dev/null and b/images/h/lon/0/4.png differ
diff --git a/images/h/lon/1/0.png b/images/h/lon/1/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lon/1/0.png differ
diff --git a/images/h/lon/1/1.png b/images/h/lon/1/1.png
new file mode 100644 (file)
index 0000000..2a8e1e8
Binary files /dev/null and b/images/h/lon/1/1.png differ
diff --git a/images/h/lon/1/2.png b/images/h/lon/1/2.png
new file mode 100644 (file)
index 0000000..171fb08
Binary files /dev/null and b/images/h/lon/1/2.png differ
diff --git a/images/h/lon/1/3.png b/images/h/lon/1/3.png
new file mode 100644 (file)
index 0000000..a90100d
Binary files /dev/null and b/images/h/lon/1/3.png differ
diff --git a/images/h/lon/1/4.png b/images/h/lon/1/4.png
new file mode 100644 (file)
index 0000000..df544e4
Binary files /dev/null and b/images/h/lon/1/4.png differ
diff --git a/images/h/lon/2/0.png b/images/h/lon/2/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lon/2/0.png differ
diff --git a/images/h/lon/2/1.png b/images/h/lon/2/1.png
new file mode 100644 (file)
index 0000000..627511a
Binary files /dev/null and b/images/h/lon/2/1.png differ
diff --git a/images/h/lon/2/2.png b/images/h/lon/2/2.png
new file mode 100644 (file)
index 0000000..34f63ad
Binary files /dev/null and b/images/h/lon/2/2.png differ
diff --git a/images/h/lon/2/3.png b/images/h/lon/2/3.png
new file mode 100644 (file)
index 0000000..d8d8cf7
Binary files /dev/null and b/images/h/lon/2/3.png differ
diff --git a/images/h/lon/2/4.png b/images/h/lon/2/4.png
new file mode 100644 (file)
index 0000000..c5204a5
Binary files /dev/null and b/images/h/lon/2/4.png differ
diff --git a/images/h/lon/3/0.png b/images/h/lon/3/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lon/3/0.png differ
diff --git a/images/h/lon/3/1.png b/images/h/lon/3/1.png
new file mode 100644 (file)
index 0000000..5f76c55
Binary files /dev/null and b/images/h/lon/3/1.png differ
diff --git a/images/h/lon/3/2.png b/images/h/lon/3/2.png
new file mode 100644 (file)
index 0000000..f251e47
Binary files /dev/null and b/images/h/lon/3/2.png differ
diff --git a/images/h/lon/3/3.png b/images/h/lon/3/3.png
new file mode 100644 (file)
index 0000000..4599d20
Binary files /dev/null and b/images/h/lon/3/3.png differ
diff --git a/images/h/lon/3/4.png b/images/h/lon/3/4.png
new file mode 100644 (file)
index 0000000..1792b98
Binary files /dev/null and b/images/h/lon/3/4.png differ
diff --git a/images/h/lon/4/0.png b/images/h/lon/4/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lon/4/0.png differ
diff --git a/images/h/lon/4/1.png b/images/h/lon/4/1.png
new file mode 100644 (file)
index 0000000..393033b
Binary files /dev/null and b/images/h/lon/4/1.png differ
diff --git a/images/h/lon/4/2.png b/images/h/lon/4/2.png
new file mode 100644 (file)
index 0000000..177c6de
Binary files /dev/null and b/images/h/lon/4/2.png differ
diff --git a/images/h/lon/4/3.png b/images/h/lon/4/3.png
new file mode 100644 (file)
index 0000000..05f1b14
Binary files /dev/null and b/images/h/lon/4/3.png differ
diff --git a/images/h/lon/4/4.png b/images/h/lon/4/4.png
new file mode 100644 (file)
index 0000000..eeadc16
Binary files /dev/null and b/images/h/lon/4/4.png differ
diff --git a/images/h/lon/5/0.png b/images/h/lon/5/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/lon/5/0.png differ
diff --git a/images/h/lon/5/1.png b/images/h/lon/5/1.png
new file mode 100644 (file)
index 0000000..f7a52f5
Binary files /dev/null and b/images/h/lon/5/1.png differ
diff --git a/images/h/lon/5/2.png b/images/h/lon/5/2.png
new file mode 100644 (file)
index 0000000..d705a27
Binary files /dev/null and b/images/h/lon/5/2.png differ
diff --git a/images/h/lon/5/3.png b/images/h/lon/5/3.png
new file mode 100644 (file)
index 0000000..99b1da2
Binary files /dev/null and b/images/h/lon/5/3.png differ
diff --git a/images/h/lon/5/4.png b/images/h/lon/5/4.png
new file mode 100644 (file)
index 0000000..61a33a4
Binary files /dev/null and b/images/h/lon/5/4.png differ
diff --git a/images/h/vert/0/0.png b/images/h/vert/0/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/0/0.png differ
diff --git a/images/h/vert/0/1.png b/images/h/vert/0/1.png
new file mode 100644 (file)
index 0000000..2067350
Binary files /dev/null and b/images/h/vert/0/1.png differ
diff --git a/images/h/vert/0/2.png b/images/h/vert/0/2.png
new file mode 100644 (file)
index 0000000..af0d680
Binary files /dev/null and b/images/h/vert/0/2.png differ
diff --git a/images/h/vert/0/3.png b/images/h/vert/0/3.png
new file mode 100644 (file)
index 0000000..8855497
Binary files /dev/null and b/images/h/vert/0/3.png differ
diff --git a/images/h/vert/0/4.png b/images/h/vert/0/4.png
new file mode 100644 (file)
index 0000000..69ff803
Binary files /dev/null and b/images/h/vert/0/4.png differ
diff --git a/images/h/vert/1/0.png b/images/h/vert/1/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/1/0.png differ
diff --git a/images/h/vert/1/1.png b/images/h/vert/1/1.png
new file mode 100644 (file)
index 0000000..69a5d60
Binary files /dev/null and b/images/h/vert/1/1.png differ
diff --git a/images/h/vert/1/2.png b/images/h/vert/1/2.png
new file mode 100644 (file)
index 0000000..0623622
Binary files /dev/null and b/images/h/vert/1/2.png differ
diff --git a/images/h/vert/1/3.png b/images/h/vert/1/3.png
new file mode 100644 (file)
index 0000000..891fa95
Binary files /dev/null and b/images/h/vert/1/3.png differ
diff --git a/images/h/vert/1/4.png b/images/h/vert/1/4.png
new file mode 100644 (file)
index 0000000..7b95bff
Binary files /dev/null and b/images/h/vert/1/4.png differ
diff --git a/images/h/vert/10/0.png b/images/h/vert/10/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/10/0.png differ
diff --git a/images/h/vert/10/1.png b/images/h/vert/10/1.png
new file mode 100644 (file)
index 0000000..2339e9a
Binary files /dev/null and b/images/h/vert/10/1.png differ
diff --git a/images/h/vert/10/2.png b/images/h/vert/10/2.png
new file mode 100644 (file)
index 0000000..315429a
Binary files /dev/null and b/images/h/vert/10/2.png differ
diff --git a/images/h/vert/10/3.png b/images/h/vert/10/3.png
new file mode 100644 (file)
index 0000000..2bb4935
Binary files /dev/null and b/images/h/vert/10/3.png differ
diff --git a/images/h/vert/10/4.png b/images/h/vert/10/4.png
new file mode 100644 (file)
index 0000000..66a3559
Binary files /dev/null and b/images/h/vert/10/4.png differ
diff --git a/images/h/vert/2/0.png b/images/h/vert/2/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/2/0.png differ
diff --git a/images/h/vert/2/1.png b/images/h/vert/2/1.png
new file mode 100644 (file)
index 0000000..40003d3
Binary files /dev/null and b/images/h/vert/2/1.png differ
diff --git a/images/h/vert/2/2.png b/images/h/vert/2/2.png
new file mode 100644 (file)
index 0000000..dc5b702
Binary files /dev/null and b/images/h/vert/2/2.png differ
diff --git a/images/h/vert/2/3.png b/images/h/vert/2/3.png
new file mode 100644 (file)
index 0000000..b1cf3da
Binary files /dev/null and b/images/h/vert/2/3.png differ
diff --git a/images/h/vert/2/4.png b/images/h/vert/2/4.png
new file mode 100644 (file)
index 0000000..e89ae6d
Binary files /dev/null and b/images/h/vert/2/4.png differ
diff --git a/images/h/vert/3/0.png b/images/h/vert/3/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/3/0.png differ
diff --git a/images/h/vert/3/1.png b/images/h/vert/3/1.png
new file mode 100644 (file)
index 0000000..5679c17
Binary files /dev/null and b/images/h/vert/3/1.png differ
diff --git a/images/h/vert/3/2.png b/images/h/vert/3/2.png
new file mode 100644 (file)
index 0000000..28372b5
Binary files /dev/null and b/images/h/vert/3/2.png differ
diff --git a/images/h/vert/3/3.png b/images/h/vert/3/3.png
new file mode 100644 (file)
index 0000000..dcb934d
Binary files /dev/null and b/images/h/vert/3/3.png differ
diff --git a/images/h/vert/3/4.png b/images/h/vert/3/4.png
new file mode 100644 (file)
index 0000000..40545d0
Binary files /dev/null and b/images/h/vert/3/4.png differ
diff --git a/images/h/vert/4/0.png b/images/h/vert/4/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/4/0.png differ
diff --git a/images/h/vert/4/1.png b/images/h/vert/4/1.png
new file mode 100644 (file)
index 0000000..e7a0d4d
Binary files /dev/null and b/images/h/vert/4/1.png differ
diff --git a/images/h/vert/4/2.png b/images/h/vert/4/2.png
new file mode 100644 (file)
index 0000000..99c2675
Binary files /dev/null and b/images/h/vert/4/2.png differ
diff --git a/images/h/vert/4/3.png b/images/h/vert/4/3.png
new file mode 100644 (file)
index 0000000..d041297
Binary files /dev/null and b/images/h/vert/4/3.png differ
diff --git a/images/h/vert/4/4.png b/images/h/vert/4/4.png
new file mode 100644 (file)
index 0000000..0624520
Binary files /dev/null and b/images/h/vert/4/4.png differ
diff --git a/images/h/vert/5/0.png b/images/h/vert/5/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/5/0.png differ
diff --git a/images/h/vert/5/1.png b/images/h/vert/5/1.png
new file mode 100644 (file)
index 0000000..a455772
Binary files /dev/null and b/images/h/vert/5/1.png differ
diff --git a/images/h/vert/5/2.png b/images/h/vert/5/2.png
new file mode 100644 (file)
index 0000000..0185669
Binary files /dev/null and b/images/h/vert/5/2.png differ
diff --git a/images/h/vert/5/3.png b/images/h/vert/5/3.png
new file mode 100644 (file)
index 0000000..3506caa
Binary files /dev/null and b/images/h/vert/5/3.png differ
diff --git a/images/h/vert/5/4.png b/images/h/vert/5/4.png
new file mode 100644 (file)
index 0000000..ee17720
Binary files /dev/null and b/images/h/vert/5/4.png differ
diff --git a/images/h/vert/6/0.png b/images/h/vert/6/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/6/0.png differ
diff --git a/images/h/vert/6/1.png b/images/h/vert/6/1.png
new file mode 100644 (file)
index 0000000..493797a
Binary files /dev/null and b/images/h/vert/6/1.png differ
diff --git a/images/h/vert/6/2.png b/images/h/vert/6/2.png
new file mode 100644 (file)
index 0000000..a934f19
Binary files /dev/null and b/images/h/vert/6/2.png differ
diff --git a/images/h/vert/6/3.png b/images/h/vert/6/3.png
new file mode 100644 (file)
index 0000000..4d7f721
Binary files /dev/null and b/images/h/vert/6/3.png differ
diff --git a/images/h/vert/6/4.png b/images/h/vert/6/4.png
new file mode 100644 (file)
index 0000000..fe86e0a
Binary files /dev/null and b/images/h/vert/6/4.png differ
diff --git a/images/h/vert/7/0.png b/images/h/vert/7/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/7/0.png differ
diff --git a/images/h/vert/7/1.png b/images/h/vert/7/1.png
new file mode 100644 (file)
index 0000000..9298533
Binary files /dev/null and b/images/h/vert/7/1.png differ
diff --git a/images/h/vert/7/2.png b/images/h/vert/7/2.png
new file mode 100644 (file)
index 0000000..63a3616
Binary files /dev/null and b/images/h/vert/7/2.png differ
diff --git a/images/h/vert/7/3.png b/images/h/vert/7/3.png
new file mode 100644 (file)
index 0000000..dbf7775
Binary files /dev/null and b/images/h/vert/7/3.png differ
diff --git a/images/h/vert/7/4.png b/images/h/vert/7/4.png
new file mode 100644 (file)
index 0000000..92cefbe
Binary files /dev/null and b/images/h/vert/7/4.png differ
diff --git a/images/h/vert/8/0.png b/images/h/vert/8/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/8/0.png differ
diff --git a/images/h/vert/8/1.png b/images/h/vert/8/1.png
new file mode 100644 (file)
index 0000000..0e3f726
Binary files /dev/null and b/images/h/vert/8/1.png differ
diff --git a/images/h/vert/8/2.png b/images/h/vert/8/2.png
new file mode 100644 (file)
index 0000000..9f0ffb4
Binary files /dev/null and b/images/h/vert/8/2.png differ
diff --git a/images/h/vert/8/3.png b/images/h/vert/8/3.png
new file mode 100644 (file)
index 0000000..2070016
Binary files /dev/null and b/images/h/vert/8/3.png differ
diff --git a/images/h/vert/8/4.png b/images/h/vert/8/4.png
new file mode 100644 (file)
index 0000000..7bb8b9f
Binary files /dev/null and b/images/h/vert/8/4.png differ
diff --git a/images/h/vert/9/0.png b/images/h/vert/9/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/h/vert/9/0.png differ
diff --git a/images/h/vert/9/1.png b/images/h/vert/9/1.png
new file mode 100644 (file)
index 0000000..5fd890f
Binary files /dev/null and b/images/h/vert/9/1.png differ
diff --git a/images/h/vert/9/2.png b/images/h/vert/9/2.png
new file mode 100644 (file)
index 0000000..813bd8b
Binary files /dev/null and b/images/h/vert/9/2.png differ
diff --git a/images/h/vert/9/3.png b/images/h/vert/9/3.png
new file mode 100644 (file)
index 0000000..ec030ea
Binary files /dev/null and b/images/h/vert/9/3.png differ
diff --git a/images/h/vert/9/4.png b/images/h/vert/9/4.png
new file mode 100644 (file)
index 0000000..865d6d5
Binary files /dev/null and b/images/h/vert/9/4.png differ
diff --git a/images/l/lat/0/0.png b/images/l/lat/0/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lat/0/0.png differ
diff --git a/images/l/lat/0/1.png b/images/l/lat/0/1.png
new file mode 100644 (file)
index 0000000..a3c1043
Binary files /dev/null and b/images/l/lat/0/1.png differ
diff --git a/images/l/lat/0/2.png b/images/l/lat/0/2.png
new file mode 100644 (file)
index 0000000..0d158cf
Binary files /dev/null and b/images/l/lat/0/2.png differ
diff --git a/images/l/lat/0/3.png b/images/l/lat/0/3.png
new file mode 100644 (file)
index 0000000..55769cc
Binary files /dev/null and b/images/l/lat/0/3.png differ
diff --git a/images/l/lat/0/4.png b/images/l/lat/0/4.png
new file mode 100644 (file)
index 0000000..8597fb5
Binary files /dev/null and b/images/l/lat/0/4.png differ
diff --git a/images/l/lat/1/0.png b/images/l/lat/1/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lat/1/0.png differ
diff --git a/images/l/lat/1/1.png b/images/l/lat/1/1.png
new file mode 100644 (file)
index 0000000..3ec6b7a
Binary files /dev/null and b/images/l/lat/1/1.png differ
diff --git a/images/l/lat/1/2.png b/images/l/lat/1/2.png
new file mode 100644 (file)
index 0000000..aa7644a
Binary files /dev/null and b/images/l/lat/1/2.png differ
diff --git a/images/l/lat/1/3.png b/images/l/lat/1/3.png
new file mode 100644 (file)
index 0000000..320d471
Binary files /dev/null and b/images/l/lat/1/3.png differ
diff --git a/images/l/lat/1/4.png b/images/l/lat/1/4.png
new file mode 100644 (file)
index 0000000..005d8d3
Binary files /dev/null and b/images/l/lat/1/4.png differ
diff --git a/images/l/lat/2/0.png b/images/l/lat/2/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lat/2/0.png differ
diff --git a/images/l/lat/2/1.png b/images/l/lat/2/1.png
new file mode 100644 (file)
index 0000000..025d821
Binary files /dev/null and b/images/l/lat/2/1.png differ
diff --git a/images/l/lat/2/2.png b/images/l/lat/2/2.png
new file mode 100644 (file)
index 0000000..e5077de
Binary files /dev/null and b/images/l/lat/2/2.png differ
diff --git a/images/l/lat/2/3.png b/images/l/lat/2/3.png
new file mode 100644 (file)
index 0000000..0ac8382
Binary files /dev/null and b/images/l/lat/2/3.png differ
diff --git a/images/l/lat/2/4.png b/images/l/lat/2/4.png
new file mode 100644 (file)
index 0000000..c415f6c
Binary files /dev/null and b/images/l/lat/2/4.png differ
diff --git a/images/l/lat/3/0.png b/images/l/lat/3/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lat/3/0.png differ
diff --git a/images/l/lat/3/1.png b/images/l/lat/3/1.png
new file mode 100644 (file)
index 0000000..31e0456
Binary files /dev/null and b/images/l/lat/3/1.png differ
diff --git a/images/l/lat/3/2.png b/images/l/lat/3/2.png
new file mode 100644 (file)
index 0000000..398e694
Binary files /dev/null and b/images/l/lat/3/2.png differ
diff --git a/images/l/lat/3/3.png b/images/l/lat/3/3.png
new file mode 100644 (file)
index 0000000..789b5fc
Binary files /dev/null and b/images/l/lat/3/3.png differ
diff --git a/images/l/lat/3/4.png b/images/l/lat/3/4.png
new file mode 100644 (file)
index 0000000..621457b
Binary files /dev/null and b/images/l/lat/3/4.png differ
diff --git a/images/l/lat/4/0.png b/images/l/lat/4/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lat/4/0.png differ
diff --git a/images/l/lat/4/1.png b/images/l/lat/4/1.png
new file mode 100644 (file)
index 0000000..4feabca
Binary files /dev/null and b/images/l/lat/4/1.png differ
diff --git a/images/l/lat/4/2.png b/images/l/lat/4/2.png
new file mode 100644 (file)
index 0000000..7d13fc4
Binary files /dev/null and b/images/l/lat/4/2.png differ
diff --git a/images/l/lat/4/3.png b/images/l/lat/4/3.png
new file mode 100644 (file)
index 0000000..d39dc57
Binary files /dev/null and b/images/l/lat/4/3.png differ
diff --git a/images/l/lat/4/4.png b/images/l/lat/4/4.png
new file mode 100644 (file)
index 0000000..1062c44
Binary files /dev/null and b/images/l/lat/4/4.png differ
diff --git a/images/l/lat/5/0.png b/images/l/lat/5/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lat/5/0.png differ
diff --git a/images/l/lat/5/1.png b/images/l/lat/5/1.png
new file mode 100644 (file)
index 0000000..42a2b80
Binary files /dev/null and b/images/l/lat/5/1.png differ
diff --git a/images/l/lat/5/2.png b/images/l/lat/5/2.png
new file mode 100644 (file)
index 0000000..47a9730
Binary files /dev/null and b/images/l/lat/5/2.png differ
diff --git a/images/l/lat/5/3.png b/images/l/lat/5/3.png
new file mode 100644 (file)
index 0000000..ab28c3c
Binary files /dev/null and b/images/l/lat/5/3.png differ
diff --git a/images/l/lat/5/4.png b/images/l/lat/5/4.png
new file mode 100644 (file)
index 0000000..71238db
Binary files /dev/null and b/images/l/lat/5/4.png differ
diff --git a/images/l/leg/0.png b/images/l/leg/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/leg/0.png differ
diff --git a/images/l/leg/1.png b/images/l/leg/1.png
new file mode 100644 (file)
index 0000000..f44b17e
Binary files /dev/null and b/images/l/leg/1.png differ
diff --git a/images/l/leg/2.png b/images/l/leg/2.png
new file mode 100644 (file)
index 0000000..f44b17e
Binary files /dev/null and b/images/l/leg/2.png differ
diff --git a/images/l/leg/3.png b/images/l/leg/3.png
new file mode 100644 (file)
index 0000000..f44b17e
Binary files /dev/null and b/images/l/leg/3.png differ
diff --git a/images/l/leg/4.png b/images/l/leg/4.png
new file mode 100644 (file)
index 0000000..557188f
Binary files /dev/null and b/images/l/leg/4.png differ
diff --git a/images/l/lon/0/0.png b/images/l/lon/0/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lon/0/0.png differ
diff --git a/images/l/lon/0/1.png b/images/l/lon/0/1.png
new file mode 100644 (file)
index 0000000..ed6cc34
Binary files /dev/null and b/images/l/lon/0/1.png differ
diff --git a/images/l/lon/0/2.png b/images/l/lon/0/2.png
new file mode 100644 (file)
index 0000000..b68a329
Binary files /dev/null and b/images/l/lon/0/2.png differ
diff --git a/images/l/lon/0/3.png b/images/l/lon/0/3.png
new file mode 100644 (file)
index 0000000..701b737
Binary files /dev/null and b/images/l/lon/0/3.png differ
diff --git a/images/l/lon/0/4.png b/images/l/lon/0/4.png
new file mode 100644 (file)
index 0000000..3da0239
Binary files /dev/null and b/images/l/lon/0/4.png differ
diff --git a/images/l/lon/1/0.png b/images/l/lon/1/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lon/1/0.png differ
diff --git a/images/l/lon/1/1.png b/images/l/lon/1/1.png
new file mode 100644 (file)
index 0000000..2a8e1e8
Binary files /dev/null and b/images/l/lon/1/1.png differ
diff --git a/images/l/lon/1/2.png b/images/l/lon/1/2.png
new file mode 100644 (file)
index 0000000..e57ab32
Binary files /dev/null and b/images/l/lon/1/2.png differ
diff --git a/images/l/lon/1/3.png b/images/l/lon/1/3.png
new file mode 100644 (file)
index 0000000..de5e2b4
Binary files /dev/null and b/images/l/lon/1/3.png differ
diff --git a/images/l/lon/1/4.png b/images/l/lon/1/4.png
new file mode 100644 (file)
index 0000000..df544e4
Binary files /dev/null and b/images/l/lon/1/4.png differ
diff --git a/images/l/lon/2/0.png b/images/l/lon/2/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lon/2/0.png differ
diff --git a/images/l/lon/2/1.png b/images/l/lon/2/1.png
new file mode 100644 (file)
index 0000000..627511a
Binary files /dev/null and b/images/l/lon/2/1.png differ
diff --git a/images/l/lon/2/2.png b/images/l/lon/2/2.png
new file mode 100644 (file)
index 0000000..78ce728
Binary files /dev/null and b/images/l/lon/2/2.png differ
diff --git a/images/l/lon/2/3.png b/images/l/lon/2/3.png
new file mode 100644 (file)
index 0000000..0d6c05b
Binary files /dev/null and b/images/l/lon/2/3.png differ
diff --git a/images/l/lon/2/4.png b/images/l/lon/2/4.png
new file mode 100644 (file)
index 0000000..c5204a5
Binary files /dev/null and b/images/l/lon/2/4.png differ
diff --git a/images/l/lon/3/0.png b/images/l/lon/3/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lon/3/0.png differ
diff --git a/images/l/lon/3/1.png b/images/l/lon/3/1.png
new file mode 100644 (file)
index 0000000..5f76c55
Binary files /dev/null and b/images/l/lon/3/1.png differ
diff --git a/images/l/lon/3/2.png b/images/l/lon/3/2.png
new file mode 100644 (file)
index 0000000..d5434bc
Binary files /dev/null and b/images/l/lon/3/2.png differ
diff --git a/images/l/lon/3/3.png b/images/l/lon/3/3.png
new file mode 100644 (file)
index 0000000..4b97cdc
Binary files /dev/null and b/images/l/lon/3/3.png differ
diff --git a/images/l/lon/3/4.png b/images/l/lon/3/4.png
new file mode 100644 (file)
index 0000000..1792b98
Binary files /dev/null and b/images/l/lon/3/4.png differ
diff --git a/images/l/lon/4/0.png b/images/l/lon/4/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lon/4/0.png differ
diff --git a/images/l/lon/4/1.png b/images/l/lon/4/1.png
new file mode 100644 (file)
index 0000000..393033b
Binary files /dev/null and b/images/l/lon/4/1.png differ
diff --git a/images/l/lon/4/2.png b/images/l/lon/4/2.png
new file mode 100644 (file)
index 0000000..38082ad
Binary files /dev/null and b/images/l/lon/4/2.png differ
diff --git a/images/l/lon/4/3.png b/images/l/lon/4/3.png
new file mode 100644 (file)
index 0000000..9c5a8d6
Binary files /dev/null and b/images/l/lon/4/3.png differ
diff --git a/images/l/lon/4/4.png b/images/l/lon/4/4.png
new file mode 100644 (file)
index 0000000..eeadc16
Binary files /dev/null and b/images/l/lon/4/4.png differ
diff --git a/images/l/lon/5/0.png b/images/l/lon/5/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/lon/5/0.png differ
diff --git a/images/l/lon/5/1.png b/images/l/lon/5/1.png
new file mode 100644 (file)
index 0000000..f7a52f5
Binary files /dev/null and b/images/l/lon/5/1.png differ
diff --git a/images/l/lon/5/2.png b/images/l/lon/5/2.png
new file mode 100644 (file)
index 0000000..66c828c
Binary files /dev/null and b/images/l/lon/5/2.png differ
diff --git a/images/l/lon/5/3.png b/images/l/lon/5/3.png
new file mode 100644 (file)
index 0000000..14c8274
Binary files /dev/null and b/images/l/lon/5/3.png differ
diff --git a/images/l/lon/5/4.png b/images/l/lon/5/4.png
new file mode 100644 (file)
index 0000000..61a33a4
Binary files /dev/null and b/images/l/lon/5/4.png differ
diff --git a/images/l/vert/0/0.png b/images/l/vert/0/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/0/0.png differ
diff --git a/images/l/vert/0/1.png b/images/l/vert/0/1.png
new file mode 100644 (file)
index 0000000..2067350
Binary files /dev/null and b/images/l/vert/0/1.png differ
diff --git a/images/l/vert/0/2.png b/images/l/vert/0/2.png
new file mode 100644 (file)
index 0000000..7a5826c
Binary files /dev/null and b/images/l/vert/0/2.png differ
diff --git a/images/l/vert/0/3.png b/images/l/vert/0/3.png
new file mode 100644 (file)
index 0000000..82fb426
Binary files /dev/null and b/images/l/vert/0/3.png differ
diff --git a/images/l/vert/0/4.png b/images/l/vert/0/4.png
new file mode 100644 (file)
index 0000000..69ff803
Binary files /dev/null and b/images/l/vert/0/4.png differ
diff --git a/images/l/vert/1/0.png b/images/l/vert/1/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/1/0.png differ
diff --git a/images/l/vert/1/1.png b/images/l/vert/1/1.png
new file mode 100644 (file)
index 0000000..69a5d60
Binary files /dev/null and b/images/l/vert/1/1.png differ
diff --git a/images/l/vert/1/2.png b/images/l/vert/1/2.png
new file mode 100644 (file)
index 0000000..39c2ec0
Binary files /dev/null and b/images/l/vert/1/2.png differ
diff --git a/images/l/vert/1/3.png b/images/l/vert/1/3.png
new file mode 100644 (file)
index 0000000..d0fe640
Binary files /dev/null and b/images/l/vert/1/3.png differ
diff --git a/images/l/vert/1/4.png b/images/l/vert/1/4.png
new file mode 100644 (file)
index 0000000..7b95bff
Binary files /dev/null and b/images/l/vert/1/4.png differ
diff --git a/images/l/vert/10/0.png b/images/l/vert/10/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/10/0.png differ
diff --git a/images/l/vert/10/1.png b/images/l/vert/10/1.png
new file mode 100644 (file)
index 0000000..2339e9a
Binary files /dev/null and b/images/l/vert/10/1.png differ
diff --git a/images/l/vert/10/2.png b/images/l/vert/10/2.png
new file mode 100644 (file)
index 0000000..315429a
Binary files /dev/null and b/images/l/vert/10/2.png differ
diff --git a/images/l/vert/10/3.png b/images/l/vert/10/3.png
new file mode 100644 (file)
index 0000000..2bb4935
Binary files /dev/null and b/images/l/vert/10/3.png differ
diff --git a/images/l/vert/10/4.png b/images/l/vert/10/4.png
new file mode 100644 (file)
index 0000000..66a3559
Binary files /dev/null and b/images/l/vert/10/4.png differ
diff --git a/images/l/vert/2/0.png b/images/l/vert/2/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/2/0.png differ
diff --git a/images/l/vert/2/1.png b/images/l/vert/2/1.png
new file mode 100644 (file)
index 0000000..40003d3
Binary files /dev/null and b/images/l/vert/2/1.png differ
diff --git a/images/l/vert/2/2.png b/images/l/vert/2/2.png
new file mode 100644 (file)
index 0000000..148122c
Binary files /dev/null and b/images/l/vert/2/2.png differ
diff --git a/images/l/vert/2/3.png b/images/l/vert/2/3.png
new file mode 100644 (file)
index 0000000..927f04b
Binary files /dev/null and b/images/l/vert/2/3.png differ
diff --git a/images/l/vert/2/4.png b/images/l/vert/2/4.png
new file mode 100644 (file)
index 0000000..e89ae6d
Binary files /dev/null and b/images/l/vert/2/4.png differ
diff --git a/images/l/vert/3/0.png b/images/l/vert/3/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/3/0.png differ
diff --git a/images/l/vert/3/1.png b/images/l/vert/3/1.png
new file mode 100644 (file)
index 0000000..5679c17
Binary files /dev/null and b/images/l/vert/3/1.png differ
diff --git a/images/l/vert/3/2.png b/images/l/vert/3/2.png
new file mode 100644 (file)
index 0000000..7ed1b57
Binary files /dev/null and b/images/l/vert/3/2.png differ
diff --git a/images/l/vert/3/3.png b/images/l/vert/3/3.png
new file mode 100644 (file)
index 0000000..78d1ad5
Binary files /dev/null and b/images/l/vert/3/3.png differ
diff --git a/images/l/vert/3/4.png b/images/l/vert/3/4.png
new file mode 100644 (file)
index 0000000..40545d0
Binary files /dev/null and b/images/l/vert/3/4.png differ
diff --git a/images/l/vert/4/0.png b/images/l/vert/4/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/4/0.png differ
diff --git a/images/l/vert/4/1.png b/images/l/vert/4/1.png
new file mode 100644 (file)
index 0000000..e7a0d4d
Binary files /dev/null and b/images/l/vert/4/1.png differ
diff --git a/images/l/vert/4/2.png b/images/l/vert/4/2.png
new file mode 100644 (file)
index 0000000..e9145d9
Binary files /dev/null and b/images/l/vert/4/2.png differ
diff --git a/images/l/vert/4/3.png b/images/l/vert/4/3.png
new file mode 100644 (file)
index 0000000..2d8c563
Binary files /dev/null and b/images/l/vert/4/3.png differ
diff --git a/images/l/vert/4/4.png b/images/l/vert/4/4.png
new file mode 100644 (file)
index 0000000..0624520
Binary files /dev/null and b/images/l/vert/4/4.png differ
diff --git a/images/l/vert/5/0.png b/images/l/vert/5/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/5/0.png differ
diff --git a/images/l/vert/5/1.png b/images/l/vert/5/1.png
new file mode 100644 (file)
index 0000000..a455772
Binary files /dev/null and b/images/l/vert/5/1.png differ
diff --git a/images/l/vert/5/2.png b/images/l/vert/5/2.png
new file mode 100644 (file)
index 0000000..742f677
Binary files /dev/null and b/images/l/vert/5/2.png differ
diff --git a/images/l/vert/5/3.png b/images/l/vert/5/3.png
new file mode 100644 (file)
index 0000000..10205ce
Binary files /dev/null and b/images/l/vert/5/3.png differ
diff --git a/images/l/vert/5/4.png b/images/l/vert/5/4.png
new file mode 100644 (file)
index 0000000..ee17720
Binary files /dev/null and b/images/l/vert/5/4.png differ
diff --git a/images/l/vert/6/0.png b/images/l/vert/6/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/6/0.png differ
diff --git a/images/l/vert/6/1.png b/images/l/vert/6/1.png
new file mode 100644 (file)
index 0000000..493797a
Binary files /dev/null and b/images/l/vert/6/1.png differ
diff --git a/images/l/vert/6/2.png b/images/l/vert/6/2.png
new file mode 100644 (file)
index 0000000..b42d807
Binary files /dev/null and b/images/l/vert/6/2.png differ
diff --git a/images/l/vert/6/3.png b/images/l/vert/6/3.png
new file mode 100644 (file)
index 0000000..f7064ff
Binary files /dev/null and b/images/l/vert/6/3.png differ
diff --git a/images/l/vert/6/4.png b/images/l/vert/6/4.png
new file mode 100644 (file)
index 0000000..fe86e0a
Binary files /dev/null and b/images/l/vert/6/4.png differ
diff --git a/images/l/vert/7/0.png b/images/l/vert/7/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/7/0.png differ
diff --git a/images/l/vert/7/1.png b/images/l/vert/7/1.png
new file mode 100644 (file)
index 0000000..9298533
Binary files /dev/null and b/images/l/vert/7/1.png differ
diff --git a/images/l/vert/7/2.png b/images/l/vert/7/2.png
new file mode 100644 (file)
index 0000000..8d6c7c8
Binary files /dev/null and b/images/l/vert/7/2.png differ
diff --git a/images/l/vert/7/3.png b/images/l/vert/7/3.png
new file mode 100644 (file)
index 0000000..e919734
Binary files /dev/null and b/images/l/vert/7/3.png differ
diff --git a/images/l/vert/7/4.png b/images/l/vert/7/4.png
new file mode 100644 (file)
index 0000000..92cefbe
Binary files /dev/null and b/images/l/vert/7/4.png differ
diff --git a/images/l/vert/8/0.png b/images/l/vert/8/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/8/0.png differ
diff --git a/images/l/vert/8/1.png b/images/l/vert/8/1.png
new file mode 100644 (file)
index 0000000..0e3f726
Binary files /dev/null and b/images/l/vert/8/1.png differ
diff --git a/images/l/vert/8/2.png b/images/l/vert/8/2.png
new file mode 100644 (file)
index 0000000..4697d22
Binary files /dev/null and b/images/l/vert/8/2.png differ
diff --git a/images/l/vert/8/3.png b/images/l/vert/8/3.png
new file mode 100644 (file)
index 0000000..0b92fa3
Binary files /dev/null and b/images/l/vert/8/3.png differ
diff --git a/images/l/vert/8/4.png b/images/l/vert/8/4.png
new file mode 100644 (file)
index 0000000..7bb8b9f
Binary files /dev/null and b/images/l/vert/8/4.png differ
diff --git a/images/l/vert/9/0.png b/images/l/vert/9/0.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/l/vert/9/0.png differ
diff --git a/images/l/vert/9/1.png b/images/l/vert/9/1.png
new file mode 100644 (file)
index 0000000..5fd890f
Binary files /dev/null and b/images/l/vert/9/1.png differ
diff --git a/images/l/vert/9/2.png b/images/l/vert/9/2.png
new file mode 100644 (file)
index 0000000..2c8b074
Binary files /dev/null and b/images/l/vert/9/2.png differ
diff --git a/images/l/vert/9/3.png b/images/l/vert/9/3.png
new file mode 100644 (file)
index 0000000..82234f1
Binary files /dev/null and b/images/l/vert/9/3.png differ
diff --git a/images/l/vert/9/4.png b/images/l/vert/9/4.png
new file mode 100644 (file)
index 0000000..865d6d5
Binary files /dev/null and b/images/l/vert/9/4.png differ
diff --git a/images/lat/0/ice.png b/images/lat/0/ice.png
new file mode 100644 (file)
index 0000000..a16d707
Binary files /dev/null and b/images/lat/0/ice.png differ
diff --git a/images/lat/0/liquid.png b/images/lat/0/liquid.png
new file mode 100644 (file)
index 0000000..a86ceb3
Binary files /dev/null and b/images/lat/0/liquid.png differ
diff --git a/images/lat/1/ice.png b/images/lat/1/ice.png
new file mode 100644 (file)
index 0000000..aee06fc
Binary files /dev/null and b/images/lat/1/ice.png differ
diff --git a/images/lat/1/liquid.png b/images/lat/1/liquid.png
new file mode 100644 (file)
index 0000000..178b75b
Binary files /dev/null and b/images/lat/1/liquid.png differ
diff --git a/images/lat/2/ice.png b/images/lat/2/ice.png
new file mode 100644 (file)
index 0000000..576e3c9
Binary files /dev/null and b/images/lat/2/ice.png differ
diff --git a/images/lat/2/liquid.png b/images/lat/2/liquid.png
new file mode 100644 (file)
index 0000000..501c2a3
Binary files /dev/null and b/images/lat/2/liquid.png differ
diff --git a/images/lat/3/ice.png b/images/lat/3/ice.png
new file mode 100644 (file)
index 0000000..ca0642f
Binary files /dev/null and b/images/lat/3/ice.png differ
diff --git a/images/lat/3/liquid.png b/images/lat/3/liquid.png
new file mode 100644 (file)
index 0000000..178c0b0
Binary files /dev/null and b/images/lat/3/liquid.png differ
diff --git a/images/lat/4/ice.png b/images/lat/4/ice.png
new file mode 100644 (file)
index 0000000..223f57b
Binary files /dev/null and b/images/lat/4/ice.png differ
diff --git a/images/lat/4/liquid.png b/images/lat/4/liquid.png
new file mode 100644 (file)
index 0000000..510a813
Binary files /dev/null and b/images/lat/4/liquid.png differ
diff --git a/images/lat/5/ice.png b/images/lat/5/ice.png
new file mode 100644 (file)
index 0000000..90cb8f4
Binary files /dev/null and b/images/lat/5/ice.png differ
diff --git a/images/lat/5/liquid.png b/images/lat/5/liquid.png
new file mode 100644 (file)
index 0000000..b9a0114
Binary files /dev/null and b/images/lat/5/liquid.png differ
diff --git a/images/leg/ice.png b/images/leg/ice.png
new file mode 100644 (file)
index 0000000..8b904f8
Binary files /dev/null and b/images/leg/ice.png differ
diff --git a/images/leg/liquid.png b/images/leg/liquid.png
new file mode 100644 (file)
index 0000000..89c32fb
Binary files /dev/null and b/images/leg/liquid.png differ
diff --git a/images/lon/0/ice.png b/images/lon/0/ice.png
new file mode 100644 (file)
index 0000000..45ab93b
Binary files /dev/null and b/images/lon/0/ice.png differ
diff --git a/images/lon/0/liquid.png b/images/lon/0/liquid.png
new file mode 100644 (file)
index 0000000..b2b85e8
Binary files /dev/null and b/images/lon/0/liquid.png differ
diff --git a/images/lon/1/ice.png b/images/lon/1/ice.png
new file mode 100644 (file)
index 0000000..fd69806
Binary files /dev/null and b/images/lon/1/ice.png differ
diff --git a/images/lon/1/liquid.png b/images/lon/1/liquid.png
new file mode 100644 (file)
index 0000000..1db0f5a
Binary files /dev/null and b/images/lon/1/liquid.png differ
diff --git a/images/lon/2/ice.png b/images/lon/2/ice.png
new file mode 100644 (file)
index 0000000..a0bfd07
Binary files /dev/null and b/images/lon/2/ice.png differ
diff --git a/images/lon/2/liquid.png b/images/lon/2/liquid.png
new file mode 100644 (file)
index 0000000..9e7ddd0
Binary files /dev/null and b/images/lon/2/liquid.png differ
diff --git a/images/lon/3/ice.png b/images/lon/3/ice.png
new file mode 100644 (file)
index 0000000..fdb23c2
Binary files /dev/null and b/images/lon/3/ice.png differ
diff --git a/images/lon/3/liquid.png b/images/lon/3/liquid.png
new file mode 100644 (file)
index 0000000..253581f
Binary files /dev/null and b/images/lon/3/liquid.png differ
diff --git a/images/lon/4/ice.png b/images/lon/4/ice.png
new file mode 100644 (file)
index 0000000..d3331a5
Binary files /dev/null and b/images/lon/4/ice.png differ
diff --git a/images/lon/4/liquid.png b/images/lon/4/liquid.png
new file mode 100644 (file)
index 0000000..0ee787e
Binary files /dev/null and b/images/lon/4/liquid.png differ
diff --git a/images/lon/5/ice.png b/images/lon/5/ice.png
new file mode 100644 (file)
index 0000000..1fa1b54
Binary files /dev/null and b/images/lon/5/ice.png differ
diff --git a/images/lon/5/liquid.png b/images/lon/5/liquid.png
new file mode 100644 (file)
index 0000000..8fd7df3
Binary files /dev/null and b/images/lon/5/liquid.png differ
diff --git a/images/radarlabviewertiles b/images/radarlabviewertiles
new file mode 160000 (submodule)
index 0000000..7ac759c
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 7ac759c2492d38e17bd6d8bde925ba217bbb5b09
diff --git a/images/rlegend.png b/images/rlegend.png
new file mode 100644 (file)
index 0000000..fcdb840
Binary files /dev/null and b/images/rlegend.png differ
diff --git a/images/rr.png b/images/rr.png
new file mode 100644 (file)
index 0000000..ecba1d8
Binary files /dev/null and b/images/rr.png differ
diff --git a/images/stemp.png b/images/stemp.png
new file mode 100644 (file)
index 0000000..bbad78b
Binary files /dev/null and b/images/stemp.png differ
diff --git a/images/swind.png b/images/swind.png
new file mode 100644 (file)
index 0000000..9b2b556
Binary files /dev/null and b/images/swind.png differ
diff --git a/images/tlegend.png b/images/tlegend.png
new file mode 100644 (file)
index 0000000..79be2a3
Binary files /dev/null and b/images/tlegend.png differ
diff --git a/images/transparent.png b/images/transparent.png
new file mode 100644 (file)
index 0000000..3c5699e
Binary files /dev/null and b/images/transparent.png differ
diff --git a/images/vert/0/ice.png b/images/vert/0/ice.png
new file mode 100644 (file)
index 0000000..c960db7
Binary files /dev/null and b/images/vert/0/ice.png differ
diff --git a/images/vert/0/liquid.png b/images/vert/0/liquid.png
new file mode 100644 (file)
index 0000000..c480f1f
Binary files /dev/null and b/images/vert/0/liquid.png differ
diff --git a/images/vert/1/ice.png b/images/vert/1/ice.png
new file mode 100644 (file)
index 0000000..cc2d3e7
Binary files /dev/null and b/images/vert/1/ice.png differ
diff --git a/images/vert/1/liquid.png b/images/vert/1/liquid.png
new file mode 100644 (file)
index 0000000..f57c698
Binary files /dev/null and b/images/vert/1/liquid.png differ
diff --git a/images/vert/10/ice.png b/images/vert/10/ice.png
new file mode 100644 (file)
index 0000000..1e5ea46
Binary files /dev/null and b/images/vert/10/ice.png differ
diff --git a/images/vert/10/liquid.png b/images/vert/10/liquid.png
new file mode 100644 (file)
index 0000000..0d9e4df
Binary files /dev/null and b/images/vert/10/liquid.png differ
diff --git a/images/vert/2/ice.png b/images/vert/2/ice.png
new file mode 100644 (file)
index 0000000..b44986f
Binary files /dev/null and b/images/vert/2/ice.png differ
diff --git a/images/vert/2/liquid.png b/images/vert/2/liquid.png
new file mode 100644 (file)
index 0000000..f815e11
Binary files /dev/null and b/images/vert/2/liquid.png differ
diff --git a/images/vert/3/ice.png b/images/vert/3/ice.png
new file mode 100644 (file)
index 0000000..89bdca7
Binary files /dev/null and b/images/vert/3/ice.png differ
diff --git a/images/vert/3/liquid.png b/images/vert/3/liquid.png
new file mode 100644 (file)
index 0000000..c2a8627
Binary files /dev/null and b/images/vert/3/liquid.png differ
diff --git a/images/vert/4/ice.png b/images/vert/4/ice.png
new file mode 100644 (file)
index 0000000..59b8f75
Binary files /dev/null and b/images/vert/4/ice.png differ
diff --git a/images/vert/4/liquid.png b/images/vert/4/liquid.png
new file mode 100644 (file)
index 0000000..e11a258
Binary files /dev/null and b/images/vert/4/liquid.png differ
diff --git a/images/vert/5/ice.png b/images/vert/5/ice.png
new file mode 100644 (file)
index 0000000..a680925
Binary files /dev/null and b/images/vert/5/ice.png differ
diff --git a/images/vert/5/liquid.png b/images/vert/5/liquid.png
new file mode 100644 (file)
index 0000000..d119012
Binary files /dev/null and b/images/vert/5/liquid.png differ
diff --git a/images/vert/6/ice.png b/images/vert/6/ice.png
new file mode 100644 (file)
index 0000000..f0f9d1d
Binary files /dev/null and b/images/vert/6/ice.png differ
diff --git a/images/vert/6/liquid.png b/images/vert/6/liquid.png
new file mode 100644 (file)
index 0000000..2c454b7
Binary files /dev/null and b/images/vert/6/liquid.png differ
diff --git a/images/vert/7/ice.png b/images/vert/7/ice.png
new file mode 100644 (file)
index 0000000..d4efc45
Binary files /dev/null and b/images/vert/7/ice.png differ
diff --git a/images/vert/7/liquid.png b/images/vert/7/liquid.png
new file mode 100644 (file)
index 0000000..1ed6360
Binary files /dev/null and b/images/vert/7/liquid.png differ
diff --git a/images/vert/8/ice.png b/images/vert/8/ice.png
new file mode 100644 (file)
index 0000000..a3470d2
Binary files /dev/null and b/images/vert/8/ice.png differ
diff --git a/images/vert/8/liquid.png b/images/vert/8/liquid.png
new file mode 100644 (file)
index 0000000..0dbef81
Binary files /dev/null and b/images/vert/8/liquid.png differ
diff --git a/images/vert/9/ice.png b/images/vert/9/ice.png
new file mode 100644 (file)
index 0000000..f72b452
Binary files /dev/null and b/images/vert/9/ice.png differ
diff --git a/images/vert/9/liquid.png b/images/vert/9/liquid.png
new file mode 100644 (file)
index 0000000..0d9e4df
Binary files /dev/null and b/images/vert/9/liquid.png differ
diff --git a/index.html b/index.html
new file mode 100644 (file)
index 0000000..beee19a
--- /dev/null
@@ -0,0 +1,221 @@
+---
+layout: default
+---
+
+<div class="home">
+<script src="coords.js"></script>
+<style>
+.info {
+   background: white;
+   background: rgba(255,255,255,0.8);
+   box-shadow: 0 0 15px rgba(0,0,0,0.2);
+   border-radius: 5px;
+}
+</style>
+<center><div id="map" style="width: 725px; height: 375px"></div></center>
+<center><button onclick="loadvertcrosses();">Display Vertical Cross Sections</button>
+<button onclick="loadhoricrosses();">Display Horizontal Cross Sections</button>
+<input type="button" id="mdr" style="display:none;" onclick="togglemdr()">
+<button onclick='map.setView(centerCoord);'>Center Map</button></center>
+
+<center>
+<div id="cases">
+</div>
+
+<div id="frequencies">
+</div>
+
+<div id="sliders">
+</div>
+
+<div id="images">
+</div>
+</center>
+
+</div>
+
+<script src="static/leaflet-0.7.3/leaflet.js"></script>
+<script src="js/midlat.js"></script>
+<script src="js/map.js"></script>
+<script src="js/common.js"></script>
+<script>
+function updatelatcs(){
+        var quantity = document.getElementById('latrange').value;
+        latline.setLatLngs(latarray[quantity]);
+        refreshimages(1,quantity,imageFrequency,mdrLevel);
+        document.getElementById('latLabel').value = latarray[quantity][0,0][0];
+        }
+
+function updateloncs(){
+        var quantity = document.getElementById('lonrange').value;
+        lonline.setLatLngs(lonarray[quantity]);
+        refreshimages(2,quantity,imageFrequency,mdrLevel);
+        document.getElementById('lonLabel').value = lonarray[quantity][0,0][1];
+        }
+
+function updatevertcs(){
+        var quantity = document.getElementById('vertrange').value;
+        refreshimages(3,quantity,imageFrequency,mdrLevel);
+        document.getElementById('vertLabel').value = levelListing[quantity];
+        }
+
+
+
+  function togglemdr(){
+       mdrLevel ^= true;
+       document.getElementById('mdr').value = mdrLabel[mdrLevel];
+       if (vertImage != -1) {
+               refreshimages(3,vertImage,imageFrequency,mdrLevel);
+       } else if (vertImage == -1) {
+               refreshimages(1,latImage,imageFrequency,mdrLevel);
+               refreshimages(2,lonImage,imageFrequency,mdrLevel);
+       }
+       }
+
+  function loadvertcrosses(){
+       if (isvertloaded) {
+               return;
+       }
+
+        displayLoading();
+       setFreqButtons();
+       setVertSlider();
+        setVertBlank();
+        resetMdr();
+
+       latline.setLatLngs(latarray[0]).addTo(map);
+       lonline.setLatLngs(lonarray[0]).addTo(map);
+       
+       refreshimages(1,0,0,mdrLevel);
+       refreshimages(2,0,0,mdrLevel);
+       refreshimages(1,0,0,mdrLevel);
+
+       document.getElementById('latLabel').value = latarray[0][0,0][0];
+       document.getElementById('lonLabel').value = lonarray[0][0,0][1];    
+
+       isvertloaded = true;
+       ishoriloaded = false;
+
+        highlightLayers();
+       }
+
+  function loadhoricrosses(){
+       if (ishoriloaded) {
+               return;
+       }
+
+       displayLoading();
+        setFreqButtons();
+       setHorSlider();
+       setHorBlank();
+        resetMdr();
+
+       refreshimages(3,0,0,mdrLevel);
+
+       document.getElementById('vertLabel').value = levelListing[0];
+       
+       ishoriloaded = true;
+       isvertloaded = false;
+       
+       map.removeLayer(latline);
+       map.removeLayer(lonline);
+
+        highlightLayers();
+       }
+       
+  function togglefrequency(freq){
+       for (var frequency in frequencystring) {
+               document.getElementById(frequency).value = frequencystring[frequency];
+               }
+       document.getElementById(freq).value += ' shown';
+       if (vertImage != -1) {
+               refreshimages(3,vertImage,frequencydef[freq],mdrLevel);
+       } else if (vertImage == -1) {
+               refreshimages(1,latImage,frequencydef[freq],mdrLevel);
+               refreshimages(2,lonImage,frequencydef[freq],mdrLevel);
+       }
+       
+       }
+
+  function refreshimages(iid,value,freq,mdr){
+       if (iid == 1) {
+               if ((value != latImage) || (freq != imageFrequency) || (mdr != mdrval)) {
+                       var imagediv = document.createElement('div');
+                       latImageLoc = caseDir + mdrdef[mdr] + "/lat/" + value + "/" + freq + ".png";
+                       lonImageLoc = caseDir + mdrdef[mdr] + "/lon/" + lonImage + "/" + freq + ".png";
+                       latIceLoc = caseDir + "lat/" + value + "/ice.png";
+                       latLiquidLoc = caseDir + "lat/" + value + "/liquid.png";
+                       lonIceLoc = caseDir + "lon/" + lonImage + "/ice.png";
+                       lonLiquidLoc = caseDir + "lon/" + lonImage + "/liquid.png";
+                       imagediv.innerHTML = "<a href=" + latImageLoc + " target='_blank'>" + 
+                       "<img id='latcs1' height='200' width='400' src=" + latImageLoc + ">" + "</a>" + 
+                        "<img id='horilegend' height='200' width='37' src='" + caseDir + mdrdef[mdr] + "/leg/" + freq + ".png'>" +
+                       "<a href=" + lonImageLoc + " target='_blank'>" + 
+                       "<img id='loncs1' height='200' width='400' src=" + lonImageLoc + "></a><br>" + ///
+                       "<a href=" + latLiquidLoc + " target='_blank'>" + 
+                       "<img id='latcs1' height='200' width='400' src=" + latLiquidLoc + ">" + "</a>" + 
+                        "<img id='horilegend' height='170' width='37' src='" + caseDir + "leg/liquid.png'>" +
+                       "<a href=" + lonLiquidLoc + " target='_blank'>" + 
+                       "<img id='loncs1' height='200' width='400' src=" + lonLiquidLoc + "></a><br>" +
+                       "<a href=" + latIceLoc + " target='_blank'>" + 
+                       "<img id='latcs1' height='200' width='400' src=" + latIceLoc + ">" + "</a>" + 
+                        "<img id='horilegend' height='170' width='37' src='" + caseDir + "leg/ice.png'>" +
+                       "<a href=" + lonIceLoc + " target='_blank'>" + 
+                       "<img id='loncs1' height='200' width='400' src=" + lonIceLoc + "></a><br>";
+                       document.getElementById('images').replaceChild(imagediv,document.getElementById('images').childNodes[0]);
+                       latImage = value;
+                       imageFrequency = freq;
+            mdrval = mdrdef[mdr];
+               }
+       } else if (iid == 2) {
+               if ((value != lonImage) || (freq != imageFrequency) || (mdr != mdrval)) {
+                       var imagediv = document.createElement('div');
+                       latImageLoc = caseDir + mdrdef[mdr] + "/lat/" + latImage + "/" + freq + ".png";
+                       lonImageLoc = caseDir + mdrdef[mdr] + "/lon/" + value + "/" + freq + ".png";
+                       latIceLoc = caseDir + "lat/" + latImage + "/ice.png";
+                       latLiquidLoc = caseDir + "lat/" + latImage + "/liquid.png";
+                       lonIceLoc = caseDir + "lon/" + value + "/ice.png";
+                       lonLiquidLoc = caseDir + "lon/" + value + "/liquid.png";
+                       imagediv.innerHTML = "<a href=" + latImageLoc + " target='_blank'>" + 
+                       "<img id='latcs1' height='200' width='400' src=" + latImageLoc + ">" + "</a>" + 
+                        "<img id='horilegend' height='200' width='37' src='" + caseDir + mdrdef[mdr] + "/leg/" + freq + ".png'>" +
+                       "<a href=" + lonImageLoc + " target='_blank'>" + 
+                       "<img id='loncs1' height='200' width='400' src=" + lonImageLoc + "></a><br>" +
+                       "<a href=" + latLiquidLoc + " target='_blank'>" + 
+                       "<img id='latcs1' height='200' width='400' src=" + latLiquidLoc + ">" + "</a>" + 
+                        "<img id='horilegend' height='170' width='37' src='" + caseDir + "leg/liquid.png'>" +
+                       "<a href=" + lonLiquidLoc + " target='_blank'>" + 
+                       "<img id='loncs1' height='200' width='400' src=" + lonLiquidLoc + "></a><br>" +
+                       "<a href=" + latIceLoc + " target='_blank'>" + 
+                       "<img id='latcs1' height='200' width='400' src=" + latIceLoc + ">" + "</a>" + 
+                        "<img id='horilegend' height='170' width='37' src='" + caseDir + "leg/ice.png'>" +
+                       "<a href=" + lonIceLoc + " target='_blank'>" + 
+                       "<img id='loncs1' height='200' width='400' src=" + lonIceLoc + "></a><br>";
+                       document.getElementById('images').replaceChild(imagediv,document.getElementById('images').childNodes[0]);
+                       lonImage = value;
+                       imageFrequency = freq;
+            mdrval = mdrdef[mdr];
+               }
+       } else if (iid == 3) {
+               if ((value != vertImage) || (freq != imageFrequency) || (mdr != mdrval)) {
+                       var imagediv = document.createElement('div');
+                       vertImageLoc = caseDir + mdrdef[mdr] + "/vert/" + value + "/" + freq + ".png"
+                       vertLiquidLoc = caseDir + "vert/" + value + "/liquid.png";
+                       vertIceLoc = caseDir + "vert/" + value + "/ice.png";
+                       imagediv.innerHTML = "<a href=" + vertImageLoc + " target='_blank'>" +
+                        "<img id='vertcs1' height='400' width='600' src=" + vertImageLoc + "></a>" + 
+                        "<img id='vertlegend' height='200' width='37' src='" + caseDir + mdrdef[mdr] + "/leg/" + freq + ".png'><br>" +
+                       "<a href=" + vertLiquidLoc + " target='_blank'><img id='vertcs2' height='400' width='600' src=" + vertLiquidLoc + "></a>" +
+                       "<img id='vertlegend' height='170' width='37' src='" + caseDir + "leg/liquid.png'><br>" +
+                       "<a href=" + vertIceLoc + " target='_blank'><img id='vertcs3' height='400' width='600' src=" + vertIceLoc + "></a>" +
+                       "<img id='vertlegend' height='170' width='37' src='" + caseDir + "leg/ice.png'><br>";
+                       document.getElementById('images').replaceChild(imagediv,document.getElementById('images').childNodes[0]);
+                       vertImage = value;
+                       imageFrequency = freq;
+            mdrval = mdrdef[mdr];
+               }
+       }
+       
+       }
+setCases();
+</script>
diff --git a/init_image_dirs.sh b/init_image_dirs.sh
new file mode 100644 (file)
index 0000000..3b78b4b
--- /dev/null
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+# Base legends directory
+mkdir -p images/leg
+
+# Hydrometeor vertical cross sections
+for i in {0..5}
+do
+  mkdir -p images/lat/${i}
+  mkdir -p images/lon/${i}
+done
+
+# Hydrometeor planar cross sections
+for i in {0..10}
+do
+  mkdir -p images/vert/${i}
+done
+
+# Hydrometeor legends
+mkdir -p images/leg
+
+# Create empty figure when reflectivity is not loaded
+#convert -size 400x200 xc:transparent images/transparent.png
+
+# Reflectivity vertical cross sections
+for i in {0..5}
+do
+  mkdir -p images/h/lat/${i}
+  mkdir -p images/h/lon/${i}
+  mkdir -p images/l/lat/${i}
+  mkdir -p images/l/lon/${i}
+
+  cp images/transparent.png images/h/lat/${i}/0.png
+  cp images/transparent.png images/h/lon/${i}/0.png
+  cp images/transparent.png images/l/lat/${i}/0.png
+  cp images/transparent.png images/l/lon/${i}/0.png
+done
+
+# Reflectivity planar cross sections
+for i in {0..10}
+do
+  mkdir -p images/h/vert/${i}
+  mkdir -p images/l/vert/${i}
+
+  cp images/transparent.png images/h/vert/${i}/0.png
+  cp images/transparent.png images/l/vert/${i}/0.png
+done
+
+# Reflectivity legends
+mkdir -p images/h/leg
+mkdir -p images/l/leg
+
+cp images/transparent.png images/h/leg/0.png
+cp images/transparent.png images/l/leg/0.png
diff --git a/js/common.js b/js/common.js
new file mode 100644 (file)
index 0000000..26662af
--- /dev/null
@@ -0,0 +1,147 @@
+var frequencystring={};
+frequencystring['sbutton'] = 'S band (10 GHz)';
+frequencystring['kubutton'] = 'Ku band (14 GHz)';
+frequencystring['kabutton'] = 'Ka band (35 GHz)';
+frequencystring['wbutton'] = 'W band (94 GHz)';
+
+var frequencydef={};
+frequencydef['sbutton'] = 1;
+frequencydef['kubutton'] = 2;
+frequencydef['kabutton'] = 3;
+frequencydef['wbutton'] = 4;
+
+var mdrLabel=[ "Improved mission MDR shown", "Current mission MDR shown"];
+
+var mdrdef={};
+mdrdef[1] = 'h';
+mdrdef[0] = 'l';
+
+var levelListing = {};
+levelListing[0] = " 1.5 km";
+levelListing[1] = " 2 km";
+levelListing[2] = " 3 km";
+levelListing[3] = " 4 km";
+levelListing[4] = " 5 km";
+levelListing[5] = " 6 km";
+levelListing[6] = " 7 km";
+levelListing[7] = " 8 km";
+levelListing[8] = " 9 km";
+levelListing[9] = " 10 km";
+levelListing[10] = " 12 km";
+
+var isvertloaded = false;
+var ishoriloaded = false;
+
+var latImage = -1;
+var lonImage = -1;
+var vertImage = -1;
+var imageFrequency = 0;
+
+var mdrval = 0;
+
+var mdrLevel = 0;
+
+function setCases() {
+    var casediv = document.createElement('div');
+    casediv.innerHTML = ""
+    if (typeof caseOne === 'function') {
+        casediv.innerHTML += "<button onclick='caseOne();'>Load Case #1</button>";
+    }
+    if (typeof caseTwo === 'function') {
+        casediv.innerHTML += " <button onclick='caseTwo();'>Load Case #2</button>";
+    }
+    if (typeof caseThree === 'function') {
+        casediv.innerHTML += " <button onclick='caseThree();'>Load Case #3</button>";
+    }
+    document.getElementById('cases').replaceChild(casediv, document.getElementById('cases').childNodes[0]);
+};
+
+function resetMdr() {
+    mdrLevel = 0;
+
+    document.getElementById('mdr').style.display = "";
+    document.getElementById('mdr').value = mdrLabel[0];
+};
+
+
+function displayLoading() {
+    var loadingdiv = document.createElement('div');
+    loadingdiv.innerHTML = "<center><b>Loading...</b></center>";
+    document.getElementById('images').replaceChild(loadingdiv,document.getElementById('images').childNodes[0]);
+};
+
+
+function setFreqButtons() {
+    var frequencydiv = document.createElement('div');
+    frequencydiv.innerHTML = "";
+    for (var key in frequencystring) {
+        frequencydiv.innerHTML += "<input type='button' id='" + key + 
+                                  "' onclick='togglefrequency(this.id)' value='" + 
+                                  frequencystring[key] + "'>";
+    };
+    document.getElementById('frequencies').replaceChild(frequencydiv, document.getElementById('frequencies').childNodes[0]);
+};
+
+
+function setVertBlank() {
+    var blankUrl = 'images/transparent.png';
+
+    var imagediv = document.createElement('div');
+    imagediv.innerHTML = "";
+    for (i = 1; i < 4; i++) {
+        imagediv.innerHTML += "<img id='latcs" + i + "' height='" + vertHgt +
+                              "' width='" + vertWid + "' src='" + blankUrl + "'>" +
+                              "<img id='horilegend" + i + "' height='" + legHgt +
+                              "' width='" + legWid + "' src='" + blankUrl + "'>" +
+                              "<img id='loncs" + i + "' height='" + vertHgt +
+                              "' width='" + vertWid + "' src='" + blankUrl + "'>";
+    };
+    document.getElementById('images').replaceChild(imagediv, document.getElementById('images').childNodes[0]);
+
+    vertImage = -1;
+};
+
+
+function setHorBlank() {
+    var blankUrl = 'images/transparent.png';
+
+    var imagediv = document.createElement('div');
+    imagediv.innerHTML = "";
+    for (i = 1; i < 4; i++) {
+        imagediv.innerHTML += "<img id='vertcs" + i + "' height='" + horHgt +
+                              "' width='" + horWid + "' src='" + blankUrl + "'>" +
+                              "<img id='vertlegend" + i + "' height='" + legHgt +
+                              "' width='" + legWid + "' src='" + blankUrl + "'>";
+    };
+    document.getElementById('images').replaceChild(imagediv, document.getElementById('images').childNodes[0]);
+
+    latImage = -1;
+    lonImage = -1;
+};
+
+
+function setVertSlider() {
+    var values = [["latrange", "Latitude:", "updatelatcs();", "latLabel"],
+                  ["lonrange", "Longitude:", "updateloncs();", "lonLabel"]];
+
+    var sliderdiv = document.createElement('div');
+    sliderdiv.innerHTML = "";
+    for (i=0; i < 2; i++) {
+        sliderdiv.innerHTML += "<label for='" + values[i][0] + "'>" + values[i][1] +
+                               "</label><input id='" + values[i][0] + "' type='range' " +
+                               "min='0' max='6' value='0' onmousemove='" + values[i][2] +
+                               "' onchange='" + values[i][2] + "'><input type='text' id='" +
+                               values[i][3] + "' size='6' value='' readonly='true'>"
+    };
+    document.getElementById('sliders').replaceChild(sliderdiv, document.getElementById('sliders').childNodes[0]);
+}
+
+
+function setHorSlider() {
+    var sliderdiv = document.createElement('div');
+    sliderdiv.innerHTML = "<label for='vertrange'>Height:</label>" +
+                          "<input id='vertrange' type='range' min='0' max='10'" +
+                          "value='0' onmousemove='updatevertcs();' onchange='updatevertcs();'>" +
+                          "<input type='text' id='vertLabel' size='6' value='' readonly='true'>";
+    document.getElementById('sliders').replaceChild(sliderdiv,document.getElementById('sliders').childNodes[0]);
+}
diff --git a/js/map.js b/js/map.js
new file mode 100644 (file)
index 0000000..ffc844a
--- /dev/null
+++ b/js/map.js
@@ -0,0 +1,50 @@
+
+var mapimg = L.tileLayer(
+    'images/radarlabviewertiles/{z}/{x}/{y}.png', 
+    {
+        maxZoom: 7,
+        minZoom: 0,
+        attribution: '<a href="javascript:attribution()">Map Attributions</a>'
+    }
+);
+
+function attribution() {
+    window.alert('Map data: (c) OpenStreetMap contributors (https://openstreetmap.org).\n' +
+                 'Map style: (c) Mapbox (https://mapbox.com).\n' +
+                 'Model data courtesy S. van den Heever and A. Igel (http://reef.atmos.colostate.edu/~sue).\n' +
+                 'For more information, contact the project creator at ethan.nelson@aos.wisc.edu'
+                 );
+};
+
+overlays["Map"] = mapimg;
+
+var map = L.map('map', {
+    layers: [mapimg, rrimg] })
+    .setView(centerCoord, initialZoom);
+rlegend.addTo(map)
+L.control.layers(mainLayers, overlays).addTo(map);
+
+var latline = new L.polyline([]);
+var lonline = new L.polyline([]);
+
+
+
+  map.on('baselayerchange', function (eventLayer) {
+      if (eventLayer.name == 'Rain rate') {
+          rlegend.addTo(map);
+          tlegend.removeFrom(map);
+          rrimg.bringToBack();
+          if (map.hasLayer(swindimg)) {
+              swindimg.bringToFront();
+          }
+      }
+      else if (eventLayer.name == 'Surface temp') {
+          tlegend.addTo(map);
+          rlegend.removeFrom(map);
+          stempimg.bringToBack();
+          if (map.hasLayer(swindimg)) {
+              swindimg.bringToFront();
+          }
+      }
+  })
+
diff --git a/js/midlat.js b/js/midlat.js
new file mode 100644 (file)
index 0000000..823adc1
--- /dev/null
@@ -0,0 +1,78 @@
+var caseDir = 'images/';
+
+var vertHgt = '200';
+var vertWid = '400';
+
+var horHgt = '400';
+var horWid = '600';
+
+var legHgt = '200';
+var legWid = '37';
+
+var rrUrl = caseDir + 'rr.png',
+  rrBounds = [[26.7010,-105.9209], [46.4409,-66.8973]];
+var swindUrl = caseDir + 'swind.png',
+  swindBounds = [[26.7010,-105.9209], [46.4409,-66.8973]];
+var stempUrl = caseDir + 'stemp.png',
+  stempBounds = [[26.7010,-105.9209], [46.4409,-66.8973]];
+
+var rrimg = L.imageOverlay(rrUrl, rrBounds, {"opacity": 0.9});
+var swindimg = L.imageOverlay(swindUrl, swindBounds);
+var stempimg = L.imageOverlay(stempUrl, stempBounds, {"opacity": 0.9});
+
+var centerCoord = [36.5709, -86.4091];
+var initialZoom = 4;
+
+var mainLayers = {
+      "Rain rate": rrimg,
+      "Surface temp": stempimg
+};
+var overlays = {
+  "Surface winds": swindimg
+};
+
+  var rlegend = L.control({position: 'bottomleft'});
+  var tlegend = L.control({position: 'bottomleft'});
+
+  rlegend.onAdd = function (map){
+        var div = L.DomUtil.create('div','info legend');
+        div.innerHTML += "<img src='"+caseDir+"rlegend.png' alt='Rain rate legend' height='150'>";
+        return div;
+        };
+
+  tlegend.onAdd = function (map){
+        var div = L.DomUtil.create('div','info legend');
+        div.innerHTML += "<img src='"+caseDir+"tlegend.png' alt='Temperature legend' height='150'>";
+        return div;
+        };
+
+
+function highlightLayers() {
+        if (map.hasLayer(swindimg)) {
+                swindimg.bringToFront();
+        }
+        if (map.hasLayer(rrimg)) {
+                rrimg.bringToBack();
+        } else if (map.hasLayer(stempimg)) {
+                stempimg.bringToBack();
+        }
+};
+
+
+function caseOne(){
+        loadhoricrosses();
+        document.getElementById('vertrange').value = 9;
+        togglefrequency('wbutton');
+        updatevertcs();
+}
+
+
+function caseTwo(){
+        loadvertcrosses();
+        document.getElementById('lonrange').value = 1;
+        document.getElementById('latrange').value = 3;
+        togglefrequency('wbutton');
+        updateloncs();
+        updatelatcs();
+}
+
diff --git a/orbits.md b/orbits.md
new file mode 100644 (file)
index 0000000..20a1d1c
--- /dev/null
+++ b/orbits.md
@@ -0,0 +1,15 @@
+#### Lat
+1. 33.6604
+2. 35.6395
+3. 37.2213
+4. 39.1955
+5. 41.1650
+6. 43.1280
+
+#### Lon
+1. -93.4645
+2. -92.3056
+3. -90.5622
+4. -88.2312
+5. -86.0305
+6. -84.6678
diff --git a/quickbeam.py b/quickbeam.py
new file mode 100644 (file)
index 0000000..38f21cf
--- /dev/null
@@ -0,0 +1,153 @@
+# -*- coding: utf-8 -*-
+# MIT License (c) 2015 Ethan Nelson 
+
+def read(filename, *args):
+    """
+    A QuickBeam reader.
+
+    Input
+    -----
+    filename: a QuickBeam file
+
+    Optional arguments
+    ------------------
+    *args: include only these variables
+
+    Output
+    ------
+    ref: dictionary of values
+
+    """
+    import numpy as np
+    import struct
+
+    ref = {}
+
+    if filename[-3:] == '.gz':
+        import gzip
+        file = gzip.open(filename, 'rb')
+    else:
+        file = open(filename, 'rb')
+    
+    ref['filename'] = file.read(200)
+    ref['title'] = file.read(100)
+    ref['sensor'] = file.read(20)
+    ref['freq'] = struct.unpack( "f", file.read(4) )[0]
+    ref['year'] = struct.unpack( "hxx", file.read(4) )[0]
+    ref['month'] = struct.unpack( "hxx", file.read(4) )[0]
+    ref['day'] = struct.unpack( "hxx", file.read(4) )[0]
+    ref['hour'] = struct.unpack( "hxx", file.read(4) )[0]
+    ref['minute'] = struct.unpack( "hxx", file.read(4) )[0]
+    ref['second'] = struct.unpack( "hxx", file.read(4) )[0]
+    ref['nx'] = struct.unpack( "hxx", file.read(4) )[0]
+    ref['ny'] = struct.unpack( "hxx", file.read(4) )[0]
+    ref['deltax'] = struct.unpack( "f", file.read(4) )[0]
+    ref['deltay'] = struct.unpack( "f", file.read(4) )[0]
+    ref['nhgt'] = struct.unpack( "hxx", file.read(4) )[0]
+    
+    grid1d = ref['nhgt']
+    grid2d = ref['ny'] * ref['nx']
+    grid3d = ref['nhgt'] * ref['ny'] * ref['nx']
+
+    shape1d = [ ref['nhgt'] ]
+    shape2d = [ ref['ny'], ref['nx'] ]
+    shape3d = [ ref['nhgt'], ref['ny'], ref['nx'] ]
+
+    pos = 0
+
+    if args and 'hgt' not in args:
+        pos += 4*grid1d
+    else:
+        file.seek(pos,1)
+        ref['hgt'] = np.reshape( \
+                struct.unpack( str(grid1d)+"f", file.read(4*grid1d) ), \
+                shape1d )
+        pos = 0
+
+    if args and 'lat' not in args:
+        pos += 4*grid2d
+    else:
+        file.seek(pos,1)
+        ref['lat'] = np.reshape( \
+                struct.unpack( str(grid2d)+"f", file.read(4*grid2d) ), \
+                shape2d )
+        pos = 0
+
+    if args and 'lon' not in args:
+        pos += 4*grid2d
+    else:
+        file.seek(pos,1)
+        ref['lon'] = np.reshape( \
+                struct.unpack( str(grid2d)+"f", file.read(4*grid2d) ), \
+                shape2d )
+        pos = 0
+
+    if args and 'sfcrain' not in args:
+        pos += 4*grid2d
+    else:
+        file.seek(pos,1)
+        ref['sfcrain'] = np.reshape( \
+                struct.unpack( str(grid2d)+"f", file.read(4*grid2d) ), \
+                shape2d )
+        pos = 0
+
+    if args and 'tempk' not in args:
+        pos += 4*grid3d
+    else:
+        file.seek(pos,1)
+        ref['tempk'] = np.reshape( \
+                struct.unpack( str(grid3d)+"f", file.read(4*grid3d) ), \
+                shape3d )
+        pos = 0
+
+    if args and 'Z_eff' not in args:
+        pos += 4*grid3d
+    else:
+        file.seek(pos,1)
+        ref['Z_eff'] = np.reshape( \
+                struct.unpack( str(grid3d)+"f", file.read(4*grid3d) ), \
+                shape3d )
+        pos = 0
+
+    if args and 'Z_ray' not in args:
+        pos += 4*grid3d
+    else:
+        file.seek(pos,1)
+        ref['Z_ray'] = np.reshape( \
+                struct.unpack( str(grid3d)+"f", file.read(4*grid3d) ), \
+                shape3d )
+        pos = 0
+
+    if args and 'h_atten' not in args:
+        pos += 4*grid3d
+    else:
+        file.seek(pos,1)
+        ref['h_atten'] = np.reshape( \
+                struct.unpack( str(grid3d)+"f", file.read(4*grid3d) ), \
+                shape3d )
+        pos = 0
+
+    if args and 'g_atten' not in args:
+        pos += 4*grid3d
+    else:
+        file.seek(pos,1)
+        ref['g_atten'] = np.reshape( \
+                struct.unpack( str(grid3d)+"f", file.read(4*grid3d) ), \
+                shape3d )
+        pos = 0
+
+    if args and 'Z_cor' not in args:
+        pos += 4*grid3d
+    else:
+        file.seek(pos,1)
+        ref['Z_cor'] = np.reshape( \
+                struct.unpack( str(grid3d)+"f", file.read(4*grid3d) ), \
+                shape3d )
+        pos = 0
+
+    file.close()
+
+    if args:
+        return {key: ref[key] for key in ref if key in args}
+    else:
+        return ref
diff --git a/requirements.txt b/requirements.txt
new file mode 100644 (file)
index 0000000..f1d25ee
--- /dev/null
@@ -0,0 +1,3 @@
+matplotlib
+netCDF4
+numpy
diff --git a/static/leaflet-0.7.3/images/layers-2x.png b/static/leaflet-0.7.3/images/layers-2x.png
new file mode 100644 (file)
index 0000000..a2cf7f9
Binary files /dev/null and b/static/leaflet-0.7.3/images/layers-2x.png differ
diff --git a/static/leaflet-0.7.3/images/layers.png b/static/leaflet-0.7.3/images/layers.png
new file mode 100644 (file)
index 0000000..bca0a0e
Binary files /dev/null and b/static/leaflet-0.7.3/images/layers.png differ
diff --git a/static/leaflet-0.7.3/leaflet.css b/static/leaflet-0.7.3/leaflet.css
new file mode 100644 (file)
index 0000000..ac0cd17
--- /dev/null
@@ -0,0 +1,478 @@
+/* required styles */\r
+\r
+.leaflet-map-pane,\r
+.leaflet-tile,\r
+.leaflet-marker-icon,\r
+.leaflet-marker-shadow,\r
+.leaflet-tile-pane,\r
+.leaflet-tile-container,\r
+.leaflet-overlay-pane,\r
+.leaflet-shadow-pane,\r
+.leaflet-marker-pane,\r
+.leaflet-popup-pane,\r
+.leaflet-overlay-pane svg,\r
+.leaflet-zoom-box,\r
+.leaflet-image-layer,\r
+.leaflet-layer {\r
+       position: absolute;\r
+       left: 0;\r
+       top: 0;\r
+       }\r
+.leaflet-container {\r
+       overflow: hidden;\r
+       -ms-touch-action: none;\r
+       }\r
+.leaflet-tile,\r
+.leaflet-marker-icon,\r
+.leaflet-marker-shadow {\r
+       -webkit-user-select: none;\r
+          -moz-user-select: none;\r
+               user-select: none;\r
+       -webkit-user-drag: none;\r
+       }\r
+.leaflet-marker-icon,\r
+.leaflet-marker-shadow {\r
+       display: block;\r
+       }\r
+/* map is broken in FF if you have max-width: 100% on tiles */\r
+.leaflet-container img {\r
+       max-width: none !important;\r
+       }\r
+/* stupid Android 2 doesn't understand "max-width: none" properly */\r
+.leaflet-container img.leaflet-image-layer {\r
+       max-width: 15000px !important;\r
+       }\r
+.leaflet-tile {\r
+       filter: inherit;\r
+       visibility: hidden;\r
+       }\r
+.leaflet-tile-loaded {\r
+       visibility: inherit;\r
+       }\r
+.leaflet-zoom-box {\r
+       width: 0;\r
+       height: 0;\r
+       }\r
+/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */\r
+.leaflet-overlay-pane svg {\r
+       -moz-user-select: none;\r
+       }\r
+\r
+.leaflet-tile-pane    { z-index: 2; }\r
+.leaflet-objects-pane { z-index: 3; }\r
+.leaflet-overlay-pane { z-index: 4; }\r
+.leaflet-shadow-pane  { z-index: 5; }\r
+.leaflet-marker-pane  { z-index: 6; }\r
+.leaflet-popup-pane   { z-index: 7; }\r
+\r
+.leaflet-vml-shape {\r
+       width: 1px;\r
+       height: 1px;\r
+       }\r
+.lvml {\r
+       behavior: url(#default#VML);\r
+       display: inline-block;\r
+       position: absolute;\r
+       }\r
+\r
+\r
+/* control positioning */\r
+\r
+.leaflet-control {\r
+       position: relative;\r
+       z-index: 7;\r
+       pointer-events: auto;\r
+       }\r
+.leaflet-top,\r
+.leaflet-bottom {\r
+       position: absolute;\r
+       z-index: 1000;\r
+       pointer-events: none;\r
+       }\r
+.leaflet-top {\r
+       top: 0;\r
+       }\r
+.leaflet-right {\r
+       right: 0;\r
+       }\r
+.leaflet-bottom {\r
+       bottom: 0;\r
+       }\r
+.leaflet-left {\r
+       left: 0;\r
+       }\r
+.leaflet-control {\r
+       float: left;\r
+       clear: both;\r
+       }\r
+.leaflet-right .leaflet-control {\r
+       float: right;\r
+       }\r
+.leaflet-top .leaflet-control {\r
+       margin-top: 10px;\r
+       }\r
+.leaflet-bottom .leaflet-control {\r
+       margin-bottom: 10px;\r
+       }\r
+.leaflet-left .leaflet-control {\r
+       margin-left: 10px;\r
+       }\r
+.leaflet-right .leaflet-control {\r
+       margin-right: 10px;\r
+       }\r
+\r
+\r
+/* zoom and fade animations */\r
+\r
+.leaflet-fade-anim .leaflet-tile,\r
+.leaflet-fade-anim .leaflet-popup {\r
+       opacity: 0;\r
+       -webkit-transition: opacity 0.2s linear;\r
+          -moz-transition: opacity 0.2s linear;\r
+            -o-transition: opacity 0.2s linear;\r
+               transition: opacity 0.2s linear;\r
+       }\r
+.leaflet-fade-anim .leaflet-tile-loaded,\r
+.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {\r
+       opacity: 1;\r
+       }\r
+\r
+.leaflet-zoom-anim .leaflet-zoom-animated {\r
+       -webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);\r
+          -moz-transition:    -moz-transform 0.25s cubic-bezier(0,0,0.25,1);\r
+            -o-transition:      -o-transform 0.25s cubic-bezier(0,0,0.25,1);\r
+               transition:         transform 0.25s cubic-bezier(0,0,0.25,1);\r
+       }\r
+.leaflet-zoom-anim .leaflet-tile,\r
+.leaflet-pan-anim .leaflet-tile,\r
+.leaflet-touching .leaflet-zoom-animated {\r
+       -webkit-transition: none;\r
+          -moz-transition: none;\r
+            -o-transition: none;\r
+               transition: none;\r
+       }\r
+\r
+.leaflet-zoom-anim .leaflet-zoom-hide {\r
+       visibility: hidden;\r
+       }\r
+\r
+\r
+/* cursors */\r
+\r
+.leaflet-clickable {\r
+       cursor: pointer;\r
+       }\r
+.leaflet-container {\r
+       cursor: -webkit-grab;\r
+       cursor:    -moz-grab;\r
+       }\r
+.leaflet-popup-pane,\r
+.leaflet-control {\r
+       cursor: auto;\r
+       }\r
+.leaflet-dragging .leaflet-container,\r
+.leaflet-dragging .leaflet-clickable {\r
+       cursor: move;\r
+       cursor: -webkit-grabbing;\r
+       cursor:    -moz-grabbing;\r
+       }\r
+\r
+\r
+/* visual tweaks */\r
+\r
+.leaflet-container {\r
+       background: #ddd;\r
+       outline: 0;\r
+       }\r
+.leaflet-container a {\r
+       color: #0078A8;\r
+       }\r
+.leaflet-container a.leaflet-active {\r
+       outline: 2px solid orange;\r
+       }\r
+.leaflet-zoom-box {\r
+       border: 2px dotted #38f;\r
+       background: rgba(255,255,255,0.5);\r
+       }\r
+\r
+\r
+/* general typography */\r
+.leaflet-container {\r
+       font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;\r
+       }\r
+\r
+\r
+/* general toolbar styles */\r
+\r
+.leaflet-bar {\r
+       box-shadow: 0 1px 5px rgba(0,0,0,0.65);\r
+       border-radius: 4px;\r
+       }\r
+.leaflet-bar a,\r
+.leaflet-bar a:hover {\r
+       background-color: #fff;\r
+       border-bottom: 1px solid #ccc;\r
+       width: 26px;\r
+       height: 26px;\r
+       line-height: 26px;\r
+       display: block;\r
+       text-align: center;\r
+       text-decoration: none;\r
+       color: black;\r
+       }\r
+.leaflet-bar a,\r
+.leaflet-control-layers-toggle {\r
+       background-position: 50% 50%;\r
+       background-repeat: no-repeat;\r
+       display: block;\r
+       }\r
+.leaflet-bar a:hover {\r
+       background-color: #f4f4f4;\r
+       }\r
+.leaflet-bar a:first-child {\r
+       border-top-left-radius: 4px;\r
+       border-top-right-radius: 4px;\r
+       }\r
+.leaflet-bar a:last-child {\r
+       border-bottom-left-radius: 4px;\r
+       border-bottom-right-radius: 4px;\r
+       border-bottom: none;\r
+       }\r
+.leaflet-bar a.leaflet-disabled {\r
+       cursor: default;\r
+       background-color: #f4f4f4;\r
+       color: #bbb;\r
+       }\r
+\r
+.leaflet-touch .leaflet-bar a {\r
+       width: 30px;\r
+       height: 30px;\r
+       line-height: 30px;\r
+       }\r
+\r
+\r
+/* zoom control */\r
+\r
+.leaflet-control-zoom-in,\r
+.leaflet-control-zoom-out {\r
+       font: bold 18px 'Lucida Console', Monaco, monospace;\r
+       text-indent: 1px;\r
+       }\r
+.leaflet-control-zoom-out {\r
+       font-size: 20px;\r
+       }\r
+\r
+.leaflet-touch .leaflet-control-zoom-in {\r
+       font-size: 22px;\r
+       }\r
+.leaflet-touch .leaflet-control-zoom-out {\r
+       font-size: 24px;\r
+       }\r
+\r
+\r
+/* layers control */\r
+\r
+.leaflet-control-layers {\r
+       box-shadow: 0 1px 5px rgba(0,0,0,0.4);\r
+       background: #fff;\r
+       border-radius: 5px;\r
+       }\r
+.leaflet-control-layers-toggle {\r
+       background-image: url(images/layers.png);\r
+       width: 36px;\r
+       height: 36px;\r
+       }\r
+.leaflet-retina .leaflet-control-layers-toggle {\r
+       background-image: url(images/layers-2x.png);\r
+       background-size: 26px 26px;\r
+       }\r
+.leaflet-touch .leaflet-control-layers-toggle {\r
+       width: 44px;\r
+       height: 44px;\r
+       }\r
+.leaflet-control-layers .leaflet-control-layers-list,\r
+.leaflet-control-layers-expanded .leaflet-control-layers-toggle {\r
+       display: none;\r
+       }\r
+.leaflet-control-layers-expanded .leaflet-control-layers-list {\r
+       display: block;\r
+       position: relative;\r
+       }\r
+.leaflet-control-layers-expanded {\r
+       padding: 6px 10px 6px 6px;\r
+       color: #333;\r
+       background: #fff;\r
+       }\r
+.leaflet-control-layers-selector {\r
+       margin-top: 2px;\r
+       position: relative;\r
+       top: 1px;\r
+       }\r
+.leaflet-control-layers label {\r
+       display: block;\r
+       }\r
+.leaflet-control-layers-separator {\r
+       height: 0;\r
+       border-top: 1px solid #ddd;\r
+       margin: 5px -10px 5px -6px;\r
+       }\r
+\r
+\r
+/* attribution and scale controls */\r
+\r
+.leaflet-container .leaflet-control-attribution {\r
+       background: #fff;\r
+       background: rgba(255, 255, 255, 0.7);\r
+       margin: 0;\r
+       }\r
+.leaflet-control-attribution,\r
+.leaflet-control-scale-line {\r
+       padding: 0 5px;\r
+       color: #333;\r
+       }\r
+.leaflet-control-attribution a {\r
+       text-decoration: none;\r
+       }\r
+.leaflet-control-attribution a:hover {\r
+       text-decoration: underline;\r
+       }\r
+.leaflet-container .leaflet-control-attribution,\r
+.leaflet-container .leaflet-control-scale {\r
+       font-size: 11px;\r
+       }\r
+.leaflet-left .leaflet-control-scale {\r
+       margin-left: 5px;\r
+       }\r
+.leaflet-bottom .leaflet-control-scale {\r
+       margin-bottom: 5px;\r
+       }\r
+.leaflet-control-scale-line {\r
+       border: 2px solid #777;\r
+       border-top: none;\r
+       line-height: 1.1;\r
+       padding: 2px 5px 1px;\r
+       font-size: 11px;\r
+       white-space: nowrap;\r
+       overflow: hidden;\r
+       -moz-box-sizing: content-box;\r
+            box-sizing: content-box;\r
+\r
+       background: #fff;\r
+       background: rgba(255, 255, 255, 0.5);\r
+       }\r
+.leaflet-control-scale-line:not(:first-child) {\r
+       border-top: 2px solid #777;\r
+       border-bottom: none;\r
+       margin-top: -2px;\r
+       }\r
+.leaflet-control-scale-line:not(:first-child):not(:last-child) {\r
+       border-bottom: 2px solid #777;\r
+       }\r
+\r
+.leaflet-touch .leaflet-control-attribution,\r
+.leaflet-touch .leaflet-control-layers,\r
+.leaflet-touch .leaflet-bar {\r
+       box-shadow: none;\r
+       }\r
+.leaflet-touch .leaflet-control-layers,\r
+.leaflet-touch .leaflet-bar {\r
+       border: 2px solid rgba(0,0,0,0.2);\r
+       background-clip: padding-box;\r
+       }\r
+\r
+\r
+/* popup */\r
+\r
+.leaflet-popup {\r
+       position: absolute;\r
+       text-align: center;\r
+       }\r
+.leaflet-popup-content-wrapper {\r
+       padding: 1px;\r
+       text-align: left;\r
+       border-radius: 12px;\r
+       }\r
+.leaflet-popup-content {\r
+       margin: 13px 19px;\r
+       line-height: 1.4;\r
+       }\r
+.leaflet-popup-content p {\r
+       margin: 18px 0;\r
+       }\r
+.leaflet-popup-tip-container {\r
+       margin: 0 auto;\r
+       width: 40px;\r
+       height: 20px;\r
+       position: relative;\r
+       overflow: hidden;\r
+       }\r
+.leaflet-popup-tip {\r
+       width: 17px;\r
+       height: 17px;\r
+       padding: 1px;\r
+\r
+       margin: -10px auto 0;\r
+\r
+       -webkit-transform: rotate(45deg);\r
+          -moz-transform: rotate(45deg);\r
+           -ms-transform: rotate(45deg);\r
+            -o-transform: rotate(45deg);\r
+               transform: rotate(45deg);\r
+       }\r
+.leaflet-popup-content-wrapper,\r
+.leaflet-popup-tip {\r
+       background: white;\r
+\r
+       box-shadow: 0 3px 14px rgba(0,0,0,0.4);\r
+       }\r
+.leaflet-container a.leaflet-popup-close-button {\r
+       position: absolute;\r
+       top: 0;\r
+       right: 0;\r
+       padding: 4px 4px 0 0;\r
+       text-align: center;\r
+       width: 18px;\r
+       height: 14px;\r
+       font: 16px/14px Tahoma, Verdana, sans-serif;\r
+       color: #c3c3c3;\r
+       text-decoration: none;\r
+       font-weight: bold;\r
+       background: transparent;\r
+       }\r
+.leaflet-container a.leaflet-popup-close-button:hover {\r
+       color: #999;\r
+       }\r
+.leaflet-popup-scrolled {\r
+       overflow: auto;\r
+       border-bottom: 1px solid #ddd;\r
+       border-top: 1px solid #ddd;\r
+       }\r
+\r
+.leaflet-oldie .leaflet-popup-content-wrapper {\r
+       zoom: 1;\r
+       }\r
+.leaflet-oldie .leaflet-popup-tip {\r
+       width: 24px;\r
+       margin: 0 auto;\r
+\r
+       -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";\r
+       filter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);\r
+       }\r
+.leaflet-oldie .leaflet-popup-tip-container {\r
+       margin-top: -1px;\r
+       }\r
+\r
+.leaflet-oldie .leaflet-control-zoom,\r
+.leaflet-oldie .leaflet-control-layers,\r
+.leaflet-oldie .leaflet-popup-content-wrapper,\r
+.leaflet-oldie .leaflet-popup-tip {\r
+       border: 1px solid #999;\r
+       }\r
+\r
+\r
+/* div icon */\r
+\r
+.leaflet-div-icon {\r
+       background: #fff;\r
+       border: 1px solid #666;\r
+       }\r
diff --git a/static/leaflet-0.7.3/leaflet.js b/static/leaflet-0.7.3/leaflet.js
new file mode 100644 (file)
index 0000000..03434b7
--- /dev/null
@@ -0,0 +1,9 @@
+/*
+ Leaflet, a JavaScript library for mobile-friendly interactive maps. http://leafletjs.com
+ (c) 2010-2013, Vladimir Agafonkin
+ (c) 2010-2011, CloudMade
+*/
+!function(t,e,i){var n=t.L,o={};o.version="0.7.3","object"==typeof module&&"object"==typeof module.exports?module.exports=o:"function"==typeof define&&define.amd&&define(o),o.noConflict=function(){return t.L=n,this},t.L=o,o.Util={extend:function(t){var e,i,n,o,s=Array.prototype.slice.call(arguments,1);for(i=0,n=s.length;n>i;i++){o=s[i]||{};for(e in o)o.hasOwnProperty(e)&&(t[e]=o[e])}return t},bind:function(t,e){var i=arguments.length>2?Array.prototype.slice.call(arguments,2):null;return function(){return t.apply(e,i||arguments)}},stamp:function(){var t=0,e="_leaflet_id";return function(i){return i[e]=i[e]||++t,i[e]}}(),invokeEach:function(t,e,i){var n,o;if("object"==typeof t){o=Array.prototype.slice.call(arguments,3);for(n in t)e.apply(i,[n,t[n]].concat(o));return!0}return!1},limitExecByInterval:function(t,e,i){var n,o;return function s(){var a=arguments;return n?void(o=!0):(n=!0,setTimeout(function(){n=!1,o&&(s.apply(i,a),o=!1)},e),void t.apply(i,a))}},falseFn:function(){return!1},formatNum:function(t,e){var i=Math.pow(10,e||5);return Math.round(t*i)/i},trim:function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")},splitWords:function(t){return o.Util.trim(t).split(/\s+/)},setOptions:function(t,e){return t.options=o.extend({},t.options,e),t.options},getParamString:function(t,e,i){var n=[];for(var o in t)n.push(encodeURIComponent(i?o.toUpperCase():o)+"="+encodeURIComponent(t[o]));return(e&&-1!==e.indexOf("?")?"&":"?")+n.join("&")},template:function(t,e){return t.replace(/\{ *([\w_]+) *\}/g,function(t,n){var o=e[n];if(o===i)throw new Error("No value provided for variable "+t);return"function"==typeof o&&(o=o(e)),o})},isArray:Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},emptyImageUrl:"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs="},function(){function e(e){var i,n,o=["webkit","moz","o","ms"];for(i=0;i<o.length&&!n;i++)n=t[o[i]+e];return n}function i(e){var i=+new Date,o=Math.max(0,16-(i-n));return n=i+o,t.setTimeout(e,o)}var n=0,s=t.requestAnimationFrame||e("RequestAnimationFrame")||i,a=t.cancelAnimationFrame||e("CancelAnimationFrame")||e("CancelRequestAnimationFrame")||function(e){t.clearTimeout(e)};o.Util.requestAnimFrame=function(e,n,a,r){return e=o.bind(e,n),a&&s===i?void e():s.call(t,e,r)},o.Util.cancelAnimFrame=function(e){e&&a.call(t,e)}}(),o.extend=o.Util.extend,o.bind=o.Util.bind,o.stamp=o.Util.stamp,o.setOptions=o.Util.setOptions,o.Class=function(){},o.Class.extend=function(t){var e=function(){this.initialize&&this.initialize.apply(this,arguments),this._initHooks&&this.callInitHooks()},i=function(){};i.prototype=this.prototype;var n=new i;n.constructor=e,e.prototype=n;for(var s in this)this.hasOwnProperty(s)&&"prototype"!==s&&(e[s]=this[s]);t.statics&&(o.extend(e,t.statics),delete t.statics),t.includes&&(o.Util.extend.apply(null,[n].concat(t.includes)),delete t.includes),t.options&&n.options&&(t.options=o.extend({},n.options,t.options)),o.extend(n,t),n._initHooks=[];var a=this;return e.__super__=a.prototype,n.callInitHooks=function(){if(!this._initHooksCalled){a.prototype.callInitHooks&&a.prototype.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,e=n._initHooks.length;e>t;t++)n._initHooks[t].call(this)}},e},o.Class.include=function(t){o.extend(this.prototype,t)},o.Class.mergeOptions=function(t){o.extend(this.prototype.options,t)},o.Class.addInitHook=function(t){var e=Array.prototype.slice.call(arguments,1),i="function"==typeof t?t:function(){this[t].apply(this,e)};this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(i)};var s="_leaflet_events";o.Mixin={},o.Mixin.Events={addEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d=this[s]=this[s]||{},p=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)r={action:e,context:i||this},h=t[n],p?(l=h+"_idx",u=l+"_len",c=d[l]=d[l]||{},c[p]||(c[p]=[],d[u]=(d[u]||0)+1),c[p].push(r)):(d[h]=d[h]||[],d[h].push(r));return this},hasEventListeners:function(t){var e=this[s];return!!e&&(t in e&&e[t].length>0||t+"_idx"in e&&e[t+"_idx_len"]>0)},removeEventListener:function(t,e,i){if(!this[s])return this;if(!t)return this.clearAllEventListeners();if(o.Util.invokeEach(t,this.removeEventListener,this,e,i))return this;var n,a,r,h,l,u,c,d,p,_=this[s],m=i&&i!==this&&o.stamp(i);for(t=o.Util.splitWords(t),n=0,a=t.length;a>n;n++)if(r=t[n],u=r+"_idx",c=u+"_len",d=_[u],e){if(h=m&&d?d[m]:_[r]){for(l=h.length-1;l>=0;l--)h[l].action!==e||i&&h[l].context!==i||(p=h.splice(l,1),p[0].action=o.Util.falseFn);i&&d&&0===h.length&&(delete d[m],_[c]--)}}else delete _[r],delete _[u],delete _[c];return this},clearAllEventListeners:function(){return delete this[s],this},fireEvent:function(t,e){if(!this.hasEventListeners(t))return this;var i,n,a,r,h,l=o.Util.extend({},e,{type:t,target:this}),u=this[s];if(u[t])for(i=u[t].slice(),n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);r=u[t+"_idx"];for(h in r)if(i=r[h].slice())for(n=0,a=i.length;a>n;n++)i[n].action.call(i[n].context,l);return this},addOneTimeEventListener:function(t,e,i){if(o.Util.invokeEach(t,this.addOneTimeEventListener,this,e,i))return this;var n=o.bind(function(){this.removeEventListener(t,e,i).removeEventListener(t,n,i)},this);return this.addEventListener(t,e,i).addEventListener(t,n,i)}},o.Mixin.Events.on=o.Mixin.Events.addEventListener,o.Mixin.Events.off=o.Mixin.Events.removeEventListener,o.Mixin.Events.once=o.Mixin.Events.addOneTimeEventListener,o.Mixin.Events.fire=o.Mixin.Events.fireEvent,function(){var n="ActiveXObject"in t,s=n&&!e.addEventListener,a=navigator.userAgent.toLowerCase(),r=-1!==a.indexOf("webkit"),h=-1!==a.indexOf("chrome"),l=-1!==a.indexOf("phantom"),u=-1!==a.indexOf("android"),c=-1!==a.search("android [23]"),d=-1!==a.indexOf("gecko"),p=typeof orientation!=i+"",_=t.navigator&&t.navigator.msPointerEnabled&&t.navigator.msMaxTouchPoints&&!t.PointerEvent,m=t.PointerEvent&&t.navigator.pointerEnabled&&t.navigator.maxTouchPoints||_,f="devicePixelRatio"in t&&t.devicePixelRatio>1||"matchMedia"in t&&t.matchMedia("(min-resolution:144dpi)")&&t.matchMedia("(min-resolution:144dpi)").matches,g=e.documentElement,v=n&&"transition"in g.style,y="WebKitCSSMatrix"in t&&"m11"in new t.WebKitCSSMatrix&&!c,P="MozPerspective"in g.style,L="OTransition"in g.style,x=!t.L_DISABLE_3D&&(v||y||P||L)&&!l,w=!t.L_NO_TOUCH&&!l&&function(){var t="ontouchstart";if(m||t in g)return!0;var i=e.createElement("div"),n=!1;return i.setAttribute?(i.setAttribute(t,"return;"),"function"==typeof i[t]&&(n=!0),i.removeAttribute(t),i=null,n):!1}();o.Browser={ie:n,ielt9:s,webkit:r,gecko:d&&!r&&!t.opera&&!n,android:u,android23:c,chrome:h,ie3d:v,webkit3d:y,gecko3d:P,opera3d:L,any3d:x,mobile:p,mobileWebkit:p&&r,mobileWebkit3d:p&&y,mobileOpera:p&&t.opera,touch:w,msPointer:_,pointer:m,retina:f}}(),o.Point=function(t,e,i){this.x=i?Math.round(t):t,this.y=i?Math.round(e):e},o.Point.prototype={clone:function(){return new o.Point(this.x,this.y)},add:function(t){return this.clone()._add(o.point(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(o.point(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},distanceTo:function(t){t=o.point(t);var e=t.x-this.x,i=t.y-this.y;return Math.sqrt(e*e+i*i)},equals:function(t){return t=o.point(t),t.x===this.x&&t.y===this.y},contains:function(t){return t=o.point(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return"Point("+o.Util.formatNum(this.x)+", "+o.Util.formatNum(this.y)+")"}},o.point=function(t,e,n){return t instanceof o.Point?t:o.Util.isArray(t)?new o.Point(t[0],t[1]):t===i||null===t?t:new o.Point(t,e,n)},o.Bounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.Bounds.prototype={extend:function(t){return t=o.point(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new o.Point((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new o.Point(this.min.x,this.max.y)},getTopRight:function(){return new o.Point(this.max.x,this.min.y)},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var e,i;return t="number"==typeof t[0]||t instanceof o.Point?o.point(t):o.bounds(t),t instanceof o.Bounds?(e=t.min,i=t.max):e=i=t,e.x>=this.min.x&&i.x<=this.max.x&&e.y>=this.min.y&&i.y<=this.max.y},intersects:function(t){t=o.bounds(t);var e=this.min,i=this.max,n=t.min,s=t.max,a=s.x>=e.x&&n.x<=i.x,r=s.y>=e.y&&n.y<=i.y;return a&&r},isValid:function(){return!(!this.min||!this.max)}},o.bounds=function(t,e){return!t||t instanceof o.Bounds?t:new o.Bounds(t,e)},o.Transformation=function(t,e,i,n){this._a=t,this._b=e,this._c=i,this._d=n},o.Transformation.prototype={transform:function(t,e){return this._transform(t.clone(),e)},_transform:function(t,e){return e=e||1,t.x=e*(this._a*t.x+this._b),t.y=e*(this._c*t.y+this._d),t},untransform:function(t,e){return e=e||1,new o.Point((t.x/e-this._b)/this._a,(t.y/e-this._d)/this._c)}},o.DomUtil={get:function(t){return"string"==typeof t?e.getElementById(t):t},getStyle:function(t,i){var n=t.style[i];if(!n&&t.currentStyle&&(n=t.currentStyle[i]),(!n||"auto"===n)&&e.defaultView){var o=e.defaultView.getComputedStyle(t,null);n=o?o[i]:null}return"auto"===n?null:n},getViewportOffset:function(t){var i,n=0,s=0,a=t,r=e.body,h=e.documentElement;do{if(n+=a.offsetTop||0,s+=a.offsetLeft||0,n+=parseInt(o.DomUtil.getStyle(a,"borderTopWidth"),10)||0,s+=parseInt(o.DomUtil.getStyle(a,"borderLeftWidth"),10)||0,i=o.DomUtil.getStyle(a,"position"),a.offsetParent===r&&"absolute"===i)break;if("fixed"===i){n+=r.scrollTop||h.scrollTop||0,s+=r.scrollLeft||h.scrollLeft||0;break}if("relative"===i&&!a.offsetLeft){var l=o.DomUtil.getStyle(a,"width"),u=o.DomUtil.getStyle(a,"max-width"),c=a.getBoundingClientRect();("none"!==l||"none"!==u)&&(s+=c.left+a.clientLeft),n+=c.top+(r.scrollTop||h.scrollTop||0);break}a=a.offsetParent}while(a);a=t;do{if(a===r)break;n-=a.scrollTop||0,s-=a.scrollLeft||0,a=a.parentNode}while(a);return new o.Point(s,n)},documentIsLtr:function(){return o.DomUtil._docIsLtrCached||(o.DomUtil._docIsLtrCached=!0,o.DomUtil._docIsLtr="ltr"===o.DomUtil.getStyle(e.body,"direction")),o.DomUtil._docIsLtr},create:function(t,i,n){var o=e.createElement(t);return o.className=i,n&&n.appendChild(o),o},hasClass:function(t,e){if(t.classList!==i)return t.classList.contains(e);var n=o.DomUtil._getClass(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)},addClass:function(t,e){if(t.classList!==i)for(var n=o.Util.splitWords(e),s=0,a=n.length;a>s;s++)t.classList.add(n[s]);else if(!o.DomUtil.hasClass(t,e)){var r=o.DomUtil._getClass(t);o.DomUtil._setClass(t,(r?r+" ":"")+e)}},removeClass:function(t,e){t.classList!==i?t.classList.remove(e):o.DomUtil._setClass(t,o.Util.trim((" "+o.DomUtil._getClass(t)+" ").replace(" "+e+" "," ")))},_setClass:function(t,e){t.className.baseVal===i?t.className=e:t.className.baseVal=e},_getClass:function(t){return t.className.baseVal===i?t.className:t.className.baseVal},setOpacity:function(t,e){if("opacity"in t.style)t.style.opacity=e;else if("filter"in t.style){var i=!1,n="DXImageTransform.Microsoft.Alpha";try{i=t.filters.item(n)}catch(o){if(1===e)return}e=Math.round(100*e),i?(i.Enabled=100!==e,i.Opacity=e):t.style.filter+=" progid:"+n+"(opacity="+e+")"}},testProp:function(t){for(var i=e.documentElement.style,n=0;n<t.length;n++)if(t[n]in i)return t[n];return!1},getTranslateString:function(t){var e=o.Browser.webkit3d,i="translate"+(e?"3d":"")+"(",n=(e?",0":"")+")";return i+t.x+"px,"+t.y+"px"+n},getScaleString:function(t,e){var i=o.DomUtil.getTranslateString(e.add(e.multiplyBy(-1*t))),n=" scale("+t+") ";return i+n},setPosition:function(t,e,i){t._leaflet_pos=e,!i&&o.Browser.any3d?t.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(e):(t.style.left=e.x+"px",t.style.top=e.y+"px")},getPosition:function(t){return t._leaflet_pos}},o.DomUtil.TRANSFORM=o.DomUtil.testProp(["transform","WebkitTransform","OTransform","MozTransform","msTransform"]),o.DomUtil.TRANSITION=o.DomUtil.testProp(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),o.DomUtil.TRANSITION_END="webkitTransition"===o.DomUtil.TRANSITION||"OTransition"===o.DomUtil.TRANSITION?o.DomUtil.TRANSITION+"End":"transitionend",function(){if("onselectstart"in e)o.extend(o.DomUtil,{disableTextSelection:function(){o.DomEvent.on(t,"selectstart",o.DomEvent.preventDefault)},enableTextSelection:function(){o.DomEvent.off(t,"selectstart",o.DomEvent.preventDefault)}});else{var i=o.DomUtil.testProp(["userSelect","WebkitUserSelect","OUserSelect","MozUserSelect","msUserSelect"]);o.extend(o.DomUtil,{disableTextSelection:function(){if(i){var t=e.documentElement.style;this._userSelect=t[i],t[i]="none"}},enableTextSelection:function(){i&&(e.documentElement.style[i]=this._userSelect,delete this._userSelect)}})}o.extend(o.DomUtil,{disableImageDrag:function(){o.DomEvent.on(t,"dragstart",o.DomEvent.preventDefault)},enableImageDrag:function(){o.DomEvent.off(t,"dragstart",o.DomEvent.preventDefault)}})}(),o.LatLng=function(t,e,n){if(t=parseFloat(t),e=parseFloat(e),isNaN(t)||isNaN(e))throw new Error("Invalid LatLng object: ("+t+", "+e+")");this.lat=t,this.lng=e,n!==i&&(this.alt=parseFloat(n))},o.extend(o.LatLng,{DEG_TO_RAD:Math.PI/180,RAD_TO_DEG:180/Math.PI,MAX_MARGIN:1e-9}),o.LatLng.prototype={equals:function(t){if(!t)return!1;t=o.latLng(t);var e=Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng));return e<=o.LatLng.MAX_MARGIN},toString:function(t){return"LatLng("+o.Util.formatNum(this.lat,t)+", "+o.Util.formatNum(this.lng,t)+")"},distanceTo:function(t){t=o.latLng(t);var e=6378137,i=o.LatLng.DEG_TO_RAD,n=(t.lat-this.lat)*i,s=(t.lng-this.lng)*i,a=this.lat*i,r=t.lat*i,h=Math.sin(n/2),l=Math.sin(s/2),u=h*h+l*l*Math.cos(a)*Math.cos(r);return 2*e*Math.atan2(Math.sqrt(u),Math.sqrt(1-u))},wrap:function(t,e){var i=this.lng;return t=t||-180,e=e||180,i=(i+e)%(e-t)+(t>i||i===e?e:t),new o.LatLng(this.lat,i)}},o.latLng=function(t,e){return t instanceof o.LatLng?t:o.Util.isArray(t)?"number"==typeof t[0]||"string"==typeof t[0]?new o.LatLng(t[0],t[1],t[2]):null:t===i||null===t?t:"object"==typeof t&&"lat"in t?new o.LatLng(t.lat,"lng"in t?t.lng:t.lon):e===i?null:new o.LatLng(t,e)},o.LatLngBounds=function(t,e){if(t)for(var i=e?[t,e]:t,n=0,o=i.length;o>n;n++)this.extend(i[n])},o.LatLngBounds.prototype={extend:function(t){if(!t)return this;var e=o.latLng(t);return t=null!==e?e:o.latLngBounds(t),t instanceof o.LatLng?this._southWest||this._northEast?(this._southWest.lat=Math.min(t.lat,this._southWest.lat),this._southWest.lng=Math.min(t.lng,this._southWest.lng),this._northEast.lat=Math.max(t.lat,this._northEast.lat),this._northEast.lng=Math.max(t.lng,this._northEast.lng)):(this._southWest=new o.LatLng(t.lat,t.lng),this._northEast=new o.LatLng(t.lat,t.lng)):t instanceof o.LatLngBounds&&(this.extend(t._southWest),this.extend(t._northEast)),this},pad:function(t){var e=this._southWest,i=this._northEast,n=Math.abs(e.lat-i.lat)*t,s=Math.abs(e.lng-i.lng)*t;return new o.LatLngBounds(new o.LatLng(e.lat-n,e.lng-s),new o.LatLng(i.lat+n,i.lng+s))},getCenter:function(){return new o.LatLng((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new o.LatLng(this.getNorth(),this.getWest())},getSouthEast:function(){return new o.LatLng(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t="number"==typeof t[0]||t instanceof o.LatLng?o.latLng(t):o.latLngBounds(t);var e,i,n=this._southWest,s=this._northEast;return t instanceof o.LatLngBounds?(e=t.getSouthWest(),i=t.getNorthEast()):e=i=t,e.lat>=n.lat&&i.lat<=s.lat&&e.lng>=n.lng&&i.lng<=s.lng},intersects:function(t){t=o.latLngBounds(t);var e=this._southWest,i=this._northEast,n=t.getSouthWest(),s=t.getNorthEast(),a=s.lat>=e.lat&&n.lat<=i.lat,r=s.lng>=e.lng&&n.lng<=i.lng;return a&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(",")},equals:function(t){return t?(t=o.latLngBounds(t),this._southWest.equals(t.getSouthWest())&&this._northEast.equals(t.getNorthEast())):!1},isValid:function(){return!(!this._southWest||!this._northEast)}},o.latLngBounds=function(t,e){return!t||t instanceof o.LatLngBounds?t:new o.LatLngBounds(t,e)},o.Projection={},o.Projection.SphericalMercator={MAX_LATITUDE:85.0511287798,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=t.lng*e,a=n*e;return a=Math.log(Math.tan(Math.PI/4+a/2)),new o.Point(s,a)},unproject:function(t){var e=o.LatLng.RAD_TO_DEG,i=t.x*e,n=(2*Math.atan(Math.exp(t.y))-Math.PI/2)*e;return new o.LatLng(n,i)}},o.Projection.LonLat={project:function(t){return new o.Point(t.lng,t.lat)},unproject:function(t){return new o.LatLng(t.y,t.x)}},o.CRS={latLngToPoint:function(t,e){var i=this.projection.project(t),n=this.scale(e);return this.transformation._transform(i,n)},pointToLatLng:function(t,e){var i=this.scale(e),n=this.transformation.untransform(t,i);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},scale:function(t){return 256*Math.pow(2,t)},getSize:function(t){var e=this.scale(t);return o.point(e,e)}},o.CRS.Simple=o.extend({},o.CRS,{projection:o.Projection.LonLat,transformation:new o.Transformation(1,0,-1,0),scale:function(t){return Math.pow(2,t)}}),o.CRS.EPSG3857=o.extend({},o.CRS,{code:"EPSG:3857",projection:o.Projection.SphericalMercator,transformation:new o.Transformation(.5/Math.PI,.5,-.5/Math.PI,.5),project:function(t){var e=this.projection.project(t),i=6378137;return e.multiplyBy(i)}}),o.CRS.EPSG900913=o.extend({},o.CRS.EPSG3857,{code:"EPSG:900913"}),o.CRS.EPSG4326=o.extend({},o.CRS,{code:"EPSG:4326",projection:o.Projection.LonLat,transformation:new o.Transformation(1/360,.5,-1/360,.5)}),o.Map=o.Class.extend({includes:o.Mixin.Events,options:{crs:o.CRS.EPSG3857,fadeAnimation:o.DomUtil.TRANSITION&&!o.Browser.android23,trackResize:!0,markerZoomAnimation:o.DomUtil.TRANSITION&&o.Browser.any3d},initialize:function(t,e){e=o.setOptions(this,e),this._initContainer(t),this._initLayout(),this._onResize=o.bind(this._onResize,this),this._initEvents(),e.maxBounds&&this.setMaxBounds(e.maxBounds),e.center&&e.zoom!==i&&this.setView(o.latLng(e.center),e.zoom,{reset:!0}),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._tileLayersNum=0,this.callInitHooks(),this._addLayers(e.layers)},setView:function(t,e){return e=e===i?this.getZoom():e,this._resetView(o.latLng(t),this._limitZoom(e)),this},setZoom:function(t,e){return this._loaded?this.setView(this.getCenter(),t,{zoom:e}):(this._zoom=this._limitZoom(t),this)},zoomIn:function(t,e){return this.setZoom(this._zoom+(t||1),e)},zoomOut:function(t,e){return this.setZoom(this._zoom-(t||1),e)},setZoomAround:function(t,e,i){var n=this.getZoomScale(e),s=this.getSize().divideBy(2),a=t instanceof o.Point?t:this.latLngToContainerPoint(t),r=a.subtract(s).multiplyBy(1-1/n),h=this.containerPointToLatLng(s.add(r));return this.setView(h,e,{zoom:i})},fitBounds:function(t,e){e=e||{},t=t.getBounds?t.getBounds():o.latLngBounds(t);var i=o.point(e.paddingTopLeft||e.padding||[0,0]),n=o.point(e.paddingBottomRight||e.padding||[0,0]),s=this.getBoundsZoom(t,!1,i.add(n)),a=n.subtract(i).divideBy(2),r=this.project(t.getSouthWest(),s),h=this.project(t.getNorthEast(),s),l=this.unproject(r.add(h).divideBy(2).add(a),s);return s=e&&e.maxZoom?Math.min(e.maxZoom,s):s,this.setView(l,s,e)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,e){return this.setView(t,this._zoom,{pan:e})},panBy:function(t){return this.fire("movestart"),this._rawPanBy(o.point(t)),this.fire("move"),this.fire("moveend")},setMaxBounds:function(t){return t=o.latLngBounds(t),this.options.maxBounds=t,t?(this._loaded&&this._panInsideMaxBounds(),this.on("moveend",this._panInsideMaxBounds,this)):this.off("moveend",this._panInsideMaxBounds,this)},panInsideBounds:function(t,e){var i=this.getCenter(),n=this._limitCenter(i,this._zoom,t);return i.equals(n)?this:this.panTo(n,e)},addLayer:function(t){var e=o.stamp(t);return this._layers[e]?this:(this._layers[e]=t,!t.options||isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[e]=t,this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum++,this._tileLayersToLoad++,t.on("load",this._onTileLayerLoad,this)),this._loaded&&this._layerAdd(t),this)},removeLayer:function(t){var e=o.stamp(t);return this._layers[e]?(this._loaded&&t.onRemove(this),delete this._layers[e],this._loaded&&this.fire("layerremove",{layer:t}),this._zoomBoundLayers[e]&&(delete this._zoomBoundLayers[e],this._updateZoomLevels()),this.options.zoomAnimation&&o.TileLayer&&t instanceof o.TileLayer&&(this._tileLayersNum--,this._tileLayersToLoad--,t.off("load",this._onTileLayerLoad,this)),this):this},hasLayer:function(t){return t?o.stamp(t)in this._layers:!1},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},invalidateSize:function(t){if(!this._loaded)return this;t=o.extend({animate:!1,pan:!0},t===!0?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._initialCenter=null;var i=this.getSize(),n=e.divideBy(2).round(),s=i.divideBy(2).round(),a=n.subtract(s);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o.bind(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},addHandler:function(t,e){if(!e)return this;var i=this[t]=new e(this);return this._handlers.push(i),this.options[t]&&i.enable(),this},remove:function(){this._loaded&&this.fire("unload"),this._initEvents("off");try{delete this._container._leaflet}catch(t){this._container._leaflet=i}return this._clearPanes(),this._clearControlPos&&this._clearControlPos(),this._clearHandlers(),this},getCenter:function(){return this._checkIfLoaded(),this._initialCenter&&!this._moved()?this._initialCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds(),e=this.unproject(t.getBottomLeft()),i=this.unproject(t.getTopRight());return new o.LatLngBounds(e,i)},getMinZoom:function(){return this.options.minZoom===i?this._layersMinZoom===i?0:this._layersMinZoom:this.options.minZoom},getMaxZoom:function(){return this.options.maxZoom===i?this._layersMaxZoom===i?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,i){t=o.latLngBounds(t);var n,s=this.getMinZoom()-(e?1:0),a=this.getMaxZoom(),r=this.getSize(),h=t.getNorthWest(),l=t.getSouthEast(),u=!0;i=o.point(i||[0,0]);do s++,n=this.project(l,s).subtract(this.project(h,s)).add(i),u=e?n.x<r.x||n.y<r.y:r.contains(n);while(u&&a>=s);return u&&e?null:e?s:s-1},getSize:function(){return(!this._size||this._sizeChanged)&&(this._size=new o.Point(this._container.clientWidth,this._container.clientHeight),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(){var t=this._getTopLeftPoint();return new o.Bounds(t,t.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._initialTopLeftPoint},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t){var e=this.options.crs;return e.scale(t)/e.scale(this._zoom)},getScaleZoom:function(t){return this._zoom+Math.log(t)/Math.LN2},project:function(t,e){return e=e===i?this._zoom:e,this.options.crs.latLngToPoint(o.latLng(t),e)},unproject:function(t,e){return e=e===i?this._zoom:e,this.options.crs.pointToLatLng(o.point(t),e)},layerPointToLatLng:function(t){var e=o.point(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){var e=this.project(o.latLng(t))._round();return e._subtract(this.getPixelOrigin())},containerPointToLayerPoint:function(t){return o.point(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return o.point(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(o.point(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(o.latLng(t)))},mouseEventToContainerPoint:function(t){return o.DomEvent.getMousePosition(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=o.DomUtil.get(t);if(!e)throw new Error("Map container not found.");if(e._leaflet)throw new Error("Map container is already initialized.");e._leaflet=!0},_initLayout:function(){var t=this._container;o.DomUtil.addClass(t,"leaflet-container"+(o.Browser.touch?" leaflet-touch":"")+(o.Browser.retina?" leaflet-retina":"")+(o.Browser.ielt9?" leaflet-oldie":"")+(this.options.fadeAnimation?" leaflet-fade-anim":""));var e=o.DomUtil.getStyle(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._mapPane=t.mapPane=this._createPane("leaflet-map-pane",this._container),this._tilePane=t.tilePane=this._createPane("leaflet-tile-pane",this._mapPane),t.objectsPane=this._createPane("leaflet-objects-pane",this._mapPane),t.shadowPane=this._createPane("leaflet-shadow-pane"),t.overlayPane=this._createPane("leaflet-overlay-pane"),t.markerPane=this._createPane("leaflet-marker-pane"),t.popupPane=this._createPane("leaflet-popup-pane");var e=" leaflet-zoom-hide";this.options.markerZoomAnimation||(o.DomUtil.addClass(t.markerPane,e),o.DomUtil.addClass(t.shadowPane,e),o.DomUtil.addClass(t.popupPane,e))},_createPane:function(t,e){return o.DomUtil.create("div",t,e||this._panes.objectsPane)},_clearPanes:function(){this._container.removeChild(this._mapPane)},_addLayers:function(t){t=t?o.Util.isArray(t)?t:[t]:[];for(var e=0,i=t.length;i>e;e++)this.addLayer(t[e])},_resetView:function(t,e,i,n){var s=this._zoom!==e;n||(this.fire("movestart"),s&&this.fire("zoomstart")),this._zoom=e,this._initialCenter=t,this._initialTopLeftPoint=this._getNewTopLeftPoint(t),i?this._initialTopLeftPoint._add(this._getMapPanePos()):o.DomUtil.setPosition(this._mapPane,new o.Point(0,0)),this._tileLayersToLoad=this._tileLayersNum;var a=!this._loaded;this._loaded=!0,this.fire("viewreset",{hard:!i}),a&&(this.fire("load"),this.eachLayer(this._layerAdd,this)),this.fire("move"),(s||n)&&this.fire("zoomend"),this.fire("moveend",{hard:!i})},_rawPanBy:function(t){o.DomUtil.setPosition(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_updateZoomLevels:function(){var t,e=1/0,n=-1/0,o=this._getZoomSpan();for(t in this._zoomBoundLayers){var s=this._zoomBoundLayers[t];isNaN(s.options.minZoom)||(e=Math.min(e,s.options.minZoom)),isNaN(s.options.maxZoom)||(n=Math.max(n,s.options.maxZoom))}t===i?this._layersMaxZoom=this._layersMinZoom=i:(this._layersMaxZoom=n,this._layersMinZoom=e),o!==this._getZoomSpan()&&this.fire("zoomlevelschange")},_panInsideMaxBounds:function(){this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(e){if(o.DomEvent){e=e||"on",o.DomEvent[e](this._container,"click",this._onMouseClick,this);var i,n,s=["dblclick","mousedown","mouseup","mouseenter","mouseleave","mousemove","contextmenu"];for(i=0,n=s.length;n>i;i++)o.DomEvent[e](this._container,s[i],this._fireMouseEvent,this);this.options.trackResize&&o.DomEvent[e](t,"resize",this._onResize,this)}},_onResize:function(){o.Util.cancelAnimFrame(this._resizeRequest),this._resizeRequest=o.Util.requestAnimFrame(function(){this.invalidateSize({debounceMoveend:!0})},this,!1,this._container)},_onMouseClick:function(t){!this._loaded||!t._simulated&&(this.dragging&&this.dragging.moved()||this.boxZoom&&this.boxZoom.moved())||o.DomEvent._skipped(t)||(this.fire("preclick"),this._fireMouseEvent(t))},_fireMouseEvent:function(t){if(this._loaded&&!o.DomEvent._skipped(t)){var e=t.type;if(e="mouseenter"===e?"mouseover":"mouseleave"===e?"mouseout":e,this.hasEventListeners(e)){"contextmenu"===e&&o.DomEvent.preventDefault(t);var i=this.mouseEventToContainerPoint(t),n=this.containerPointToLayerPoint(i),s=this.layerPointToLatLng(n);this.fire(e,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t})}}},_onTileLayerLoad:function(){this._tileLayersToLoad--,this._tileLayersNum&&!this._tileLayersToLoad&&this.fire("tilelayersload")},_clearHandlers:function(){for(var t=0,e=this._handlers.length;e>t;t++)this._handlers[t].disable()},whenReady:function(t,e){return this._loaded?t.call(e||this,this):this.on("load",t,e),this},_layerAdd:function(t){t.onAdd(this),this.fire("layeradd",{layer:t})},_getMapPanePos:function(){return o.DomUtil.getPosition(this._mapPane)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(){return this.getPixelOrigin().subtract(this._getMapPanePos())},_getNewTopLeftPoint:function(t,e){var i=this.getSize()._divideBy(2);return this.project(t,e)._subtract(i)._round()},_latLngToNewLayerPoint:function(t,e,i){var n=this._getNewTopLeftPoint(i,e).add(this._getMapPanePos());return this.project(t,e)._subtract(n)},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,e,i){if(!i)return t;var n=this.project(t,e),s=this.getSize().divideBy(2),a=new o.Bounds(n.subtract(s),n.add(s)),r=this._getBoundsOffset(a,i,e);return this.unproject(n.add(r),e)},_limitOffset:function(t,e){if(!e)return t;var i=this.getPixelBounds(),n=new o.Bounds(i.min.add(t),i.max.add(t));return t.add(this._getBoundsOffset(n,e))},_getBoundsOffset:function(t,e,i){var n=this.project(e.getNorthWest(),i).subtract(t.min),s=this.project(e.getSouthEast(),i).subtract(t.max),a=this._rebound(n.x,-s.x),r=this._rebound(n.y,-s.y);return new o.Point(a,r)},_rebound:function(t,e){return t+e>0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),i=this.getMaxZoom();return Math.max(e,Math.min(i,t))}}),o.map=function(t,e){return new o.Map(t,e)},o.Projection.Mercator={MAX_LATITUDE:85.0840591556,R_MINOR:6356752.314245179,R_MAJOR:6378137,project:function(t){var e=o.LatLng.DEG_TO_RAD,i=this.MAX_LATITUDE,n=Math.max(Math.min(i,t.lat),-i),s=this.R_MAJOR,a=this.R_MINOR,r=t.lng*e*s,h=n*e,l=a/s,u=Math.sqrt(1-l*l),c=u*Math.sin(h);c=Math.pow((1-c)/(1+c),.5*u);var d=Math.tan(.5*(.5*Math.PI-h))/c;return h=-s*Math.log(d),new o.Point(r,h)},unproject:function(t){for(var e,i=o.LatLng.RAD_TO_DEG,n=this.R_MAJOR,s=this.R_MINOR,a=t.x*i/n,r=s/n,h=Math.sqrt(1-r*r),l=Math.exp(-t.y/n),u=Math.PI/2-2*Math.atan(l),c=15,d=1e-7,p=c,_=.1;Math.abs(_)>d&&--p>0;)e=h*Math.sin(u),_=Math.PI/2-2*Math.atan(l*Math.pow((1-e)/(1+e),.5*h))-u,u+=_;
+return new o.LatLng(u*i,a)}},o.CRS.EPSG3395=o.extend({},o.CRS,{code:"EPSG:3395",projection:o.Projection.Mercator,transformation:function(){var t=o.Projection.Mercator,e=t.R_MAJOR,i=.5/(Math.PI*e);return new o.Transformation(i,.5,-i,.5)}()}),o.TileLayer=o.Class.extend({includes:o.Mixin.Events,options:{minZoom:0,maxZoom:18,tileSize:256,subdomains:"abc",errorTileUrl:"",attribution:"",zoomOffset:0,opacity:1,unloadInvisibleTiles:o.Browser.mobile,updateWhenIdle:o.Browser.mobile},initialize:function(t,e){e=o.setOptions(this,e),e.detectRetina&&o.Browser.retina&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomOffset++,e.minZoom>0&&e.minZoom--,this.options.maxZoom--),e.bounds&&(e.bounds=o.latLngBounds(e.bounds)),this._url=t;var i=this.options.subdomains;"string"==typeof i&&(this.options.subdomains=i.split(""))},onAdd:function(t){this._map=t,this._animated=t._zoomAnimated,this._initContainer(),t.on({viewreset:this._reset,moveend:this._update},this),this._animated&&t.on({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||(this._limitedUpdate=o.Util.limitExecByInterval(this._update,150,this),t.on("move",this._limitedUpdate,this)),this._reset(),this._update()},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this._container.parentNode.removeChild(this._container),t.off({viewreset:this._reset,moveend:this._update},this),this._animated&&t.off({zoomanim:this._animateZoom,zoomend:this._endZoomAnim},this),this.options.updateWhenIdle||t.off("move",this._limitedUpdate,this),this._container=null,this._map=null},bringToFront:function(){var t=this._map._panes.tilePane;return this._container&&(t.appendChild(this._container),this._setAutoZIndex(t,Math.max)),this},bringToBack:function(){var t=this._map._panes.tilePane;return this._container&&(t.insertBefore(this._container,t.firstChild),this._setAutoZIndex(t,Math.min)),this},getAttribution:function(){return this.options.attribution},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},setUrl:function(t,e){return this._url=t,e||this.redraw(),this},redraw:function(){return this._map&&(this._reset({hard:!0}),this._update()),this},_updateZIndex:function(){this._container&&this.options.zIndex!==i&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t,e){var i,n,o,s=t.children,a=-e(1/0,-1/0);for(n=0,o=s.length;o>n;n++)s[n]!==this._container&&(i=parseInt(s[n].style.zIndex,10),isNaN(i)||(a=e(a,i)));this.options.zIndex=this._container.style.zIndex=(isFinite(a)?a:0)+e(1,-1)},_updateOpacity:function(){var t,e=this._tiles;if(o.Browser.ielt9)for(t in e)o.DomUtil.setOpacity(e[t],this.options.opacity);else o.DomUtil.setOpacity(this._container,this.options.opacity)},_initContainer:function(){var t=this._map._panes.tilePane;if(!this._container){if(this._container=o.DomUtil.create("div","leaflet-layer"),this._updateZIndex(),this._animated){var e="leaflet-tile-container";this._bgBuffer=o.DomUtil.create("div",e,this._container),this._tileContainer=o.DomUtil.create("div",e,this._container)}else this._tileContainer=this._container;t.appendChild(this._container),this.options.opacity<1&&this._updateOpacity()}},_reset:function(t){for(var e in this._tiles)this.fire("tileunload",{tile:this._tiles[e]});this._tiles={},this._tilesToLoad=0,this.options.reuseTiles&&(this._unusedTiles=[]),this._tileContainer.innerHTML="",this._animated&&t&&t.hard&&this._clearBgBuffer(),this._initContainer()},_getTileSize:function(){var t=this._map,e=t.getZoom()+this.options.zoomOffset,i=this.options.maxNativeZoom,n=this.options.tileSize;return i&&e>i&&(n=Math.round(t.getZoomScale(e)/t.getZoomScale(i)*n)),n},_update:function(){if(this._map){var t=this._map,e=t.getPixelBounds(),i=t.getZoom(),n=this._getTileSize();if(!(i>this.options.maxZoom||i<this.options.minZoom)){var s=o.bounds(e.min.divideBy(n)._floor(),e.max.divideBy(n)._floor());this._addTilesFromCenterOut(s),(this.options.unloadInvisibleTiles||this.options.reuseTiles)&&this._removeOtherTiles(s)}}},_addTilesFromCenterOut:function(t){var i,n,s,a=[],r=t.getCenter();for(i=t.min.y;i<=t.max.y;i++)for(n=t.min.x;n<=t.max.x;n++)s=new o.Point(n,i),this._tileShouldBeLoaded(s)&&a.push(s);var h=a.length;if(0!==h){a.sort(function(t,e){return t.distanceTo(r)-e.distanceTo(r)});var l=e.createDocumentFragment();for(this._tilesToLoad||this.fire("loading"),this._tilesToLoad+=h,n=0;h>n;n++)this._addTile(a[n],l);this._tileContainer.appendChild(l)}},_tileShouldBeLoaded:function(t){if(t.x+":"+t.y in this._tiles)return!1;var e=this.options;if(!e.continuousWorld){var i=this._getWrapTileNum();if(e.noWrap&&(t.x<0||t.x>=i.x)||t.y<0||t.y>=i.y)return!1}if(e.bounds){var n=e.tileSize,o=t.multiplyBy(n),s=o.add([n,n]),a=this._map.unproject(o),r=this._map.unproject(s);if(e.continuousWorld||e.noWrap||(a=a.wrap(),r=r.wrap()),!e.bounds.intersects([a,r]))return!1}return!0},_removeOtherTiles:function(t){var e,i,n,o;for(o in this._tiles)e=o.split(":"),i=parseInt(e[0],10),n=parseInt(e[1],10),(i<t.min.x||i>t.max.x||n<t.min.y||n>t.max.y)&&this._removeTile(o)},_removeTile:function(t){var e=this._tiles[t];this.fire("tileunload",{tile:e,url:e.src}),this.options.reuseTiles?(o.DomUtil.removeClass(e,"leaflet-tile-loaded"),this._unusedTiles.push(e)):e.parentNode===this._tileContainer&&this._tileContainer.removeChild(e),o.Browser.android||(e.onload=null,e.src=o.Util.emptyImageUrl),delete this._tiles[t]},_addTile:function(t,e){var i=this._getTilePos(t),n=this._getTile();o.DomUtil.setPosition(n,i,o.Browser.chrome),this._tiles[t.x+":"+t.y]=n,this._loadTile(n,t),n.parentNode!==this._tileContainer&&e.appendChild(n)},_getZoomForUrl:function(){var t=this.options,e=this._map.getZoom();return t.zoomReverse&&(e=t.maxZoom-e),e+=t.zoomOffset,t.maxNativeZoom?Math.min(e,t.maxNativeZoom):e},_getTilePos:function(t){var e=this._map.getPixelOrigin(),i=this._getTileSize();return t.multiplyBy(i).subtract(e)},getTileUrl:function(t){return o.Util.template(this._url,o.extend({s:this._getSubdomain(t),z:t.z,x:t.x,y:t.y},this.options))},_getWrapTileNum:function(){var t=this._map.options.crs,e=t.getSize(this._map.getZoom());return e.divideBy(this._getTileSize())._floor()},_adjustTilePoint:function(t){var e=this._getWrapTileNum();this.options.continuousWorld||this.options.noWrap||(t.x=(t.x%e.x+e.x)%e.x),this.options.tms&&(t.y=e.y-t.y-1),t.z=this._getZoomForUrl()},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_getTile:function(){if(this.options.reuseTiles&&this._unusedTiles.length>0){var t=this._unusedTiles.pop();return this._resetTile(t),t}return this._createTile()},_resetTile:function(){},_createTile:function(){var t=o.DomUtil.create("img","leaflet-tile");return t.style.width=t.style.height=this._getTileSize()+"px",t.galleryimg="no",t.onselectstart=t.onmousemove=o.Util.falseFn,o.Browser.ielt9&&this.options.opacity!==i&&o.DomUtil.setOpacity(t,this.options.opacity),o.Browser.mobileWebkit3d&&(t.style.WebkitBackfaceVisibility="hidden"),t},_loadTile:function(t,e){t._layer=this,t.onload=this._tileOnLoad,t.onerror=this._tileOnError,this._adjustTilePoint(e),t.src=this.getTileUrl(e),this.fire("tileloadstart",{tile:t,url:t.src})},_tileLoaded:function(){this._tilesToLoad--,this._animated&&o.DomUtil.addClass(this._tileContainer,"leaflet-zoom-animated"),this._tilesToLoad||(this.fire("load"),this._animated&&(clearTimeout(this._clearBgBufferTimer),this._clearBgBufferTimer=setTimeout(o.bind(this._clearBgBuffer,this),500)))},_tileOnLoad:function(){var t=this._layer;this.src!==o.Util.emptyImageUrl&&(o.DomUtil.addClass(this,"leaflet-tile-loaded"),t.fire("tileload",{tile:this,url:this.src})),t._tileLoaded()},_tileOnError:function(){var t=this._layer;t.fire("tileerror",{tile:this,url:this.src});var e=t.options.errorTileUrl;e&&(this.src=e),t._tileLoaded()}}),o.tileLayer=function(t,e){return new o.TileLayer(t,e)},o.TileLayer.WMS=o.TileLayer.extend({defaultWmsParams:{service:"WMS",request:"GetMap",version:"1.1.1",layers:"",styles:"",format:"image/jpeg",transparent:!1},initialize:function(t,e){this._url=t;var i=o.extend({},this.defaultWmsParams),n=e.tileSize||this.options.tileSize;i.width=i.height=e.detectRetina&&o.Browser.retina?2*n:n;for(var s in e)this.options.hasOwnProperty(s)||"crs"===s||(i[s]=e[s]);this.wmsParams=i,o.setOptions(this,e)},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,o.TileLayer.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._map,i=this.options.tileSize,n=t.multiplyBy(i),s=n.add([i,i]),a=this._crs.project(e.unproject(n,t.z)),r=this._crs.project(e.unproject(s,t.z)),h=this._wmsVersion>=1.3&&this._crs===o.CRS.EPSG4326?[r.y,a.x,a.y,r.x].join(","):[a.x,r.y,r.x,a.y].join(","),l=o.Util.template(this._url,{s:this._getSubdomain(t)});return l+o.Util.getParamString(this.wmsParams,l,!0)+"&BBOX="+h},setParams:function(t,e){return o.extend(this.wmsParams,t),e||this.redraw(),this}}),o.tileLayer.wms=function(t,e){return new o.TileLayer.WMS(t,e)},o.TileLayer.Canvas=o.TileLayer.extend({options:{async:!1},initialize:function(t){o.setOptions(this,t)},redraw:function(){this._map&&(this._reset({hard:!0}),this._update());for(var t in this._tiles)this._redrawTile(this._tiles[t]);return this},_redrawTile:function(t){this.drawTile(t,t._tilePoint,this._map._zoom)},_createTile:function(){var t=o.DomUtil.create("canvas","leaflet-tile");return t.width=t.height=this.options.tileSize,t.onselectstart=t.onmousemove=o.Util.falseFn,t},_loadTile:function(t,e){t._layer=this,t._tilePoint=e,this._redrawTile(t),this.options.async||this.tileDrawn(t)},drawTile:function(){},tileDrawn:function(t){this._tileOnLoad.call(t)}}),o.tileLayer.canvas=function(t){return new o.TileLayer.Canvas(t)},o.ImageOverlay=o.Class.extend({includes:o.Mixin.Events,options:{opacity:1},initialize:function(t,e,i){this._url=t,this._bounds=o.latLngBounds(e),o.setOptions(this,i)},onAdd:function(t){this._map=t,this._image||this._initImage(),t._panes.overlayPane.appendChild(this._image),t.on("viewreset",this._reset,this),t.options.zoomAnimation&&o.Browser.any3d&&t.on("zoomanim",this._animateZoom,this),this._reset()},onRemove:function(t){t.getPanes().overlayPane.removeChild(this._image),t.off("viewreset",this._reset,this),t.options.zoomAnimation&&t.off("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},bringToFront:function(){return this._image&&this._map._panes.overlayPane.appendChild(this._image),this},bringToBack:function(){var t=this._map._panes.overlayPane;return this._image&&t.insertBefore(this._image,t.firstChild),this},setUrl:function(t){this._url=t,this._image.src=this._url},getAttribution:function(){return this.options.attribution},_initImage:function(){this._image=o.DomUtil.create("img","leaflet-image-layer"),this._map.options.zoomAnimation&&o.Browser.any3d?o.DomUtil.addClass(this._image,"leaflet-zoom-animated"):o.DomUtil.addClass(this._image,"leaflet-zoom-hide"),this._updateOpacity(),o.extend(this._image,{galleryimg:"no",onselectstart:o.Util.falseFn,onmousemove:o.Util.falseFn,onload:o.bind(this._onImageLoad,this),src:this._url})},_animateZoom:function(t){var e=this._map,i=this._image,n=e.getZoomScale(t.zoom),s=this._bounds.getNorthWest(),a=this._bounds.getSouthEast(),r=e._latLngToNewLayerPoint(s,t.zoom,t.center),h=e._latLngToNewLayerPoint(a,t.zoom,t.center)._subtract(r),l=r._add(h._multiplyBy(.5*(1-1/n)));i.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(l)+" scale("+n+") "},_reset:function(){var t=this._image,e=this._map.latLngToLayerPoint(this._bounds.getNorthWest()),i=this._map.latLngToLayerPoint(this._bounds.getSouthEast())._subtract(e);o.DomUtil.setPosition(t,e),t.style.width=i.x+"px",t.style.height=i.y+"px"},_onImageLoad:function(){this.fire("load")},_updateOpacity:function(){o.DomUtil.setOpacity(this._image,this.options.opacity)}}),o.imageOverlay=function(t,e,i){return new o.ImageOverlay(t,e,i)},o.Icon=o.Class.extend({options:{className:""},initialize:function(t){o.setOptions(this,t)},createIcon:function(t){return this._createIcon("icon",t)},createShadow:function(t){return this._createIcon("shadow",t)},_createIcon:function(t,e){var i=this._getIconUrl(t);if(!i){if("icon"===t)throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n;return n=e&&"IMG"===e.tagName?this._createImg(i,e):this._createImg(i),this._setIconStyles(n,t),n},_setIconStyles:function(t,e){var i,n=this.options,s=o.point(n[e+"Size"]);i=o.point("shadow"===e?n.shadowAnchor||n.iconAnchor:n.iconAnchor),!i&&s&&(i=s.divideBy(2,!0)),t.className="leaflet-marker-"+e+" "+n.className,i&&(t.style.marginLeft=-i.x+"px",t.style.marginTop=-i.y+"px"),s&&(t.style.width=s.x+"px",t.style.height=s.y+"px")},_createImg:function(t,i){return i=i||e.createElement("img"),i.src=t,i},_getIconUrl:function(t){return o.Browser.retina&&this.options[t+"RetinaUrl"]?this.options[t+"RetinaUrl"]:this.options[t+"Url"]}}),o.icon=function(t){return new o.Icon(t)},o.Icon.Default=o.Icon.extend({options:{iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],shadowSize:[41,41]},_getIconUrl:function(t){var e=t+"Url";if(this.options[e])return this.options[e];o.Browser.retina&&"icon"===t&&(t+="-2x");var i=o.Icon.Default.imagePath;if(!i)throw new Error("Couldn't autodetect L.Icon.Default.imagePath, set it manually.");return i+"/marker-"+t+".png"}}),o.Icon.Default.imagePath=function(){var t,i,n,o,s,a=e.getElementsByTagName("script"),r=/[\/^]leaflet[\-\._]?([\w\-\._]*)\.js\??/;for(t=0,i=a.length;i>t;t++)if(n=a[t].src,o=n.match(r))return s=n.split(r)[0],(s?s+"/":"")+"images"}(),o.Marker=o.Class.extend({includes:o.Mixin.Events,options:{icon:new o.Icon.Default,title:"",alt:"",clickable:!0,draggable:!1,keyboard:!0,zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250},initialize:function(t,e){o.setOptions(this,e),this._latlng=o.latLng(t)},onAdd:function(t){this._map=t,t.on("viewreset",this.update,this),this._initIcon(),this.update(),this.fire("add"),t.options.zoomAnimation&&t.options.markerZoomAnimation&&t.on("zoomanim",this._animateZoom,this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){this.dragging&&this.dragging.disable(),this._removeIcon(),this._removeShadow(),this.fire("remove"),t.off({viewreset:this.update,zoomanim:this._animateZoom},this),this._map=null},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this.update(),this.fire("move",{latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update(),this},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup),this},update:function(){if(this._icon){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,e=this._map,i=e.options.zoomAnimation&&e.options.markerZoomAnimation,n=i?"leaflet-zoom-animated":"leaflet-zoom-hide",s=t.icon.createIcon(this._icon),a=!1;s!==this._icon&&(this._icon&&this._removeIcon(),a=!0,t.title&&(s.title=t.title),t.alt&&(s.alt=t.alt)),o.DomUtil.addClass(s,n),t.keyboard&&(s.tabIndex="0"),this._icon=s,this._initInteraction(),t.riseOnHover&&o.DomEvent.on(s,"mouseover",this._bringToFront,this).on(s,"mouseout",this._resetZIndex,this);var r=t.icon.createShadow(this._shadow),h=!1;r!==this._shadow&&(this._removeShadow(),h=!0),r&&o.DomUtil.addClass(r,n),this._shadow=r,t.opacity<1&&this._updateOpacity();var l=this._map._panes;a&&l.markerPane.appendChild(this._icon),r&&h&&l.shadowPane.appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&o.DomEvent.off(this._icon,"mouseover",this._bringToFront).off(this._icon,"mouseout",this._resetZIndex),this._map._panes.markerPane.removeChild(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&this._map._panes.shadowPane.removeChild(this._shadow),this._shadow=null},_setPos:function(t){o.DomUtil.setPosition(this._icon,t),this._shadow&&o.DomUtil.setPosition(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon.style.zIndex=this._zIndex+t},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(e)},_initInteraction:function(){if(this.options.clickable){var t=this._icon,e=["dblclick","mousedown","mouseover","mouseout","contextmenu"];o.DomUtil.addClass(t,"leaflet-clickable"),o.DomEvent.on(t,"click",this._onMouseClick,this),o.DomEvent.on(t,"keypress",this._onKeyPress,this);for(var i=0;i<e.length;i++)o.DomEvent.on(t,e[i],this._fireMouseEvent,this);o.Handler.MarkerDrag&&(this.dragging=new o.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_onMouseClick:function(t){var e=this.dragging&&this.dragging.moved();(this.hasEventListeners(t.type)||e)&&o.DomEvent.stopPropagation(t),e||(this.dragging&&this.dragging._enabled||!this._map.dragging||!this._map.dragging.moved())&&this.fire(t.type,{originalEvent:t,latlng:this._latlng})},_onKeyPress:function(t){13===t.keyCode&&this.fire("click",{originalEvent:t,latlng:this._latlng})},_fireMouseEvent:function(t){this.fire(t.type,{originalEvent:t,latlng:this._latlng}),"contextmenu"===t.type&&this.hasEventListeners(t.type)&&o.DomEvent.preventDefault(t),"mousedown"!==t.type?o.DomEvent.stopPropagation(t):o.DomEvent.preventDefault(t)},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){o.DomUtil.setOpacity(this._icon,this.options.opacity),this._shadow&&o.DomUtil.setOpacity(this._shadow,this.options.opacity)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)}}),o.marker=function(t,e){return new o.Marker(t,e)},o.DivIcon=o.Icon.extend({options:{iconSize:[12,12],className:"leaflet-div-icon",html:!1},createIcon:function(t){var i=t&&"DIV"===t.tagName?t:e.createElement("div"),n=this.options;return i.innerHTML=n.html!==!1?n.html:"",n.bgPos&&(i.style.backgroundPosition=-n.bgPos.x+"px "+-n.bgPos.y+"px"),this._setIconStyles(i,"icon"),i},createShadow:function(){return null}}),o.divIcon=function(t){return new o.DivIcon(t)},o.Map.mergeOptions({closePopupOnClick:!0}),o.Popup=o.Class.extend({includes:o.Mixin.Events,options:{minWidth:50,maxWidth:300,autoPan:!0,closeButton:!0,offset:[0,7],autoPanPadding:[5,5],keepInView:!1,className:"",zoomAnimation:!0},initialize:function(t,e){o.setOptions(this,t),this._source=e,this._animated=o.Browser.any3d&&this.options.zoomAnimation,this._isOpen=!1},onAdd:function(t){this._map=t,this._container||this._initLayout();var e=t.options.fadeAnimation;e&&o.DomUtil.setOpacity(this._container,0),t._panes.popupPane.appendChild(this._container),t.on(this._getEvents(),this),this.update(),e&&o.DomUtil.setOpacity(this._container,1),this.fire("open"),t.fire("popupopen",{popup:this}),this._source&&this._source.fire("popupopen",{popup:this})},addTo:function(t){return t.addLayer(this),this},openOn:function(t){return t.openPopup(this),this},onRemove:function(t){t._panes.popupPane.removeChild(this._container),o.Util.falseFn(this._container.offsetWidth),t.off(this._getEvents(),this),t.options.fadeAnimation&&o.DomUtil.setOpacity(this._container,0),this._map=null,this.fire("close"),t.fire("popupclose",{popup:this}),this._source&&this._source.fire("popupclose",{popup:this})},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=o.latLng(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._content=t,this.update(),this},update:function(){this._map&&(this._container.style.visibility="hidden",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility="",this._adjustPan())},_getEvents:function(){var t={viewreset:this._updatePosition};return this._animated&&(t.zoomanim=this._zoomAnimation),("closeOnClick"in this.options?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this._close),this.options.keepInView&&(t.moveend=this._adjustPan),t},_close:function(){this._map&&this._map.closePopup(this)},_initLayout:function(){var t,e="leaflet-popup",i=e+" "+this.options.className+" leaflet-zoom-"+(this._animated?"animated":"hide"),n=this._container=o.DomUtil.create("div",i);this.options.closeButton&&(t=this._closeButton=o.DomUtil.create("a",e+"-close-button",n),t.href="#close",t.innerHTML="&#215;",o.DomEvent.disableClickPropagation(t),o.DomEvent.on(t,"click",this._onCloseButtonClick,this));var s=this._wrapper=o.DomUtil.create("div",e+"-content-wrapper",n);o.DomEvent.disableClickPropagation(s),this._contentNode=o.DomUtil.create("div",e+"-content",s),o.DomEvent.disableScrollPropagation(this._contentNode),o.DomEvent.on(s,"contextmenu",o.DomEvent.stopPropagation),this._tipContainer=o.DomUtil.create("div",e+"-tip-container",n),this._tip=o.DomUtil.create("div",e+"-tip",this._tipContainer)},_updateContent:function(){if(this._content){if("string"==typeof this._content)this._contentNode.innerHTML=this._content;else{for(;this._contentNode.hasChildNodes();)this._contentNode.removeChild(this._contentNode.firstChild);this._contentNode.appendChild(this._content)}this.fire("contentupdate")}},_updateLayout:function(){var t=this._contentNode,e=t.style;e.width="",e.whiteSpace="nowrap";var i=t.offsetWidth;i=Math.min(i,this.options.maxWidth),i=Math.max(i,this.options.minWidth),e.width=i+1+"px",e.whiteSpace="",e.height="";var n=t.offsetHeight,s=this.options.maxHeight,a="leaflet-popup-scrolled";s&&n>s?(e.height=s+"px",o.DomUtil.addClass(t,a)):o.DomUtil.removeClass(t,a),this._containerWidth=this._container.offsetWidth},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),e=this._animated,i=o.point(this.options.offset);e&&o.DomUtil.setPosition(this._container,t),this._containerBottom=-i.y-(e?0:t.y),this._containerLeft=-Math.round(this._containerWidth/2)+i.x+(e?0:t.x),this._container.style.bottom=this._containerBottom+"px",this._container.style.left=this._containerLeft+"px"}},_zoomAnimation:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);o.DomUtil.setPosition(this._container,e)},_adjustPan:function(){if(this.options.autoPan){var t=this._map,e=this._container.offsetHeight,i=this._containerWidth,n=new o.Point(this._containerLeft,-e-this._containerBottom);this._animated&&n._add(o.DomUtil.getPosition(this._container));var s=t.layerPointToContainerPoint(n),a=o.point(this.options.autoPanPadding),r=o.point(this.options.autoPanPaddingTopLeft||a),h=o.point(this.options.autoPanPaddingBottomRight||a),l=t.getSize(),u=0,c=0;s.x+i+h.x>l.x&&(u=s.x+i-l.x+h.x),s.x-u-r.x<0&&(u=s.x-r.x),s.y+e+h.y>l.y&&(c=s.y+e-l.y+h.y),s.y-c-r.y<0&&(c=s.y-r.y),(u||c)&&t.fire("autopanstart").panBy([u,c])}},_onCloseButtonClick:function(t){this._close(),o.DomEvent.stop(t)}}),o.popup=function(t,e){return new o.Popup(t,e)},o.Map.include({openPopup:function(t,e,i){if(this.closePopup(),!(t instanceof o.Popup)){var n=t;t=new o.Popup(i).setLatLng(e).setContent(n)}return t._isOpen=!0,this._popup=t,this.addLayer(t)},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&(this.removeLayer(t),t._isOpen=!1),this}}),o.Marker.include({openPopup:function(){return this._popup&&this._map&&!this._map.hasLayer(this._popup)&&(this._popup.setLatLng(this._latlng),this._map.openPopup(this._popup)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(){return this._popup&&(this._popup._isOpen?this.closePopup():this.openPopup()),this},bindPopup:function(t,e){var i=o.point(this.options.icon.options.popupAnchor||[0,0]);return i=i.add(o.Popup.prototype.options.offset),e&&e.offset&&(i=i.add(e.offset)),e=o.extend({offset:i},e),this._popupHandlersAdded||(this.on("click",this.togglePopup,this).on("remove",this.closePopup,this).on("move",this._movePopup,this),this._popupHandlersAdded=!0),t instanceof o.Popup?(o.setOptions(t,e),this._popup=t):this._popup=new o.Popup(e,this).setContent(t),this},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this.togglePopup,this).off("remove",this.closePopup,this).off("move",this._movePopup,this),this._popupHandlersAdded=!1),this},getPopup:function(){return this._popup},_movePopup:function(t){this._popup.setLatLng(t.latlng)}}),o.LayerGroup=o.Class.extend({initialize:function(t){this._layers={};var e,i;if(t)for(e=0,i=t.length;i>e;e++)this.addLayer(t[e])},addLayer:function(t){var e=this.getLayerId(t);return this._layers[e]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var e=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[e]&&this._map.removeLayer(this._layers[e]),delete this._layers[e],this},hasLayer:function(t){return t?t in this._layers||this.getLayerId(t)in this._layers:!1},clearLayers:function(){return this.eachLayer(this.removeLayer,this),this},invoke:function(t){var e,i,n=Array.prototype.slice.call(arguments,1);for(e in this._layers)i=this._layers[e],i[t]&&i[t].apply(i,n);return this},onAdd:function(t){this._map=t,this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t),this._map=null},addTo:function(t){return t.addLayer(this),this},eachLayer:function(t,e){for(var i in this._layers)t.call(e,this._layers[i]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];for(var e in this._layers)t.push(this._layers[e]);return t},setZIndex:function(t){return this.invoke("setZIndex",t)},getLayerId:function(t){return o.stamp(t)}}),o.layerGroup=function(t){return new o.LayerGroup(t)},o.FeatureGroup=o.LayerGroup.extend({includes:o.Mixin.Events,statics:{EVENTS:"click dblclick mouseover mouseout mousemove contextmenu popupopen popupclose"},addLayer:function(t){return this.hasLayer(t)?this:("on"in t&&t.on(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.addLayer.call(this,t),this._popupContent&&t.bindPopup&&t.bindPopup(this._popupContent,this._popupOptions),this.fire("layeradd",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),t.off(o.FeatureGroup.EVENTS,this._propagateEvent,this),o.LayerGroup.prototype.removeLayer.call(this,t),this._popupContent&&this.invoke("unbindPopup"),this.fire("layerremove",{layer:t})):this},bindPopup:function(t,e){return this._popupContent=t,this._popupOptions=e,this.invoke("bindPopup",t,e)},openPopup:function(t){for(var e in this._layers){this._layers[e].openPopup(t);break}return this},setStyle:function(t){return this.invoke("setStyle",t)},bringToFront:function(){return this.invoke("bringToFront")},bringToBack:function(){return this.invoke("bringToBack")},getBounds:function(){var t=new o.LatLngBounds;return this.eachLayer(function(e){t.extend(e instanceof o.Marker?e.getLatLng():e.getBounds())}),t},_propagateEvent:function(t){t=o.extend({layer:t.target,target:this},t),this.fire(t.type,t)}}),o.featureGroup=function(t){return new o.FeatureGroup(t)},o.Path=o.Class.extend({includes:[o.Mixin.Events],statics:{CLIP_PADDING:function(){var e=o.Browser.mobile?1280:2e3,i=(e/Math.max(t.outerWidth,t.outerHeight)-1)/2;return Math.max(0,Math.min(.5,i))}()},options:{stroke:!0,color:"#0033ff",dashArray:null,lineCap:null,lineJoin:null,weight:5,opacity:.5,fill:!1,fillColor:null,fillOpacity:.2,clickable:!0},initialize:function(t){o.setOptions(this,t)},onAdd:function(t){this._map=t,this._container||(this._initElements(),this._initEvents()),this.projectLatlngs(),this._updatePath(),this._container&&this._map._pathRoot.appendChild(this._container),this.fire("add"),t.on({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},addTo:function(t){return t.addLayer(this),this},onRemove:function(t){t._pathRoot.removeChild(this._container),this.fire("remove"),this._map=null,o.Browser.vml&&(this._container=null,this._stroke=null,this._fill=null),t.off({viewreset:this.projectLatlngs,moveend:this._updatePath},this)},projectLatlngs:function(){},setStyle:function(t){return o.setOptions(this,t),this._container&&this._updateStyle(),this},redraw:function(){return this._map&&(this.projectLatlngs(),this._updatePath()),this}}),o.Map.include({_updatePathViewport:function(){var t=o.Path.CLIP_PADDING,e=this.getSize(),i=o.DomUtil.getPosition(this._mapPane),n=i.multiplyBy(-1)._subtract(e.multiplyBy(t)._round()),s=n.add(e.multiplyBy(1+2*t)._round());this._pathViewport=new o.Bounds(n,s)}}),o.Path.SVG_NS="http://www.w3.org/2000/svg",o.Browser.svg=!(!e.createElementNS||!e.createElementNS(o.Path.SVG_NS,"svg").createSVGRect),o.Path=o.Path.extend({statics:{SVG:o.Browser.svg},bringToFront:function(){var t=this._map._pathRoot,e=this._container;return e&&t.lastChild!==e&&t.appendChild(e),this},bringToBack:function(){var t=this._map._pathRoot,e=this._container,i=t.firstChild;return e&&i!==e&&t.insertBefore(e,i),this},getPathString:function(){},_createElement:function(t){return e.createElementNS(o.Path.SVG_NS,t)},_initElements:function(){this._map._initPathRoot(),this._initPath(),this._initStyle()},_initPath:function(){this._container=this._createElement("g"),this._path=this._createElement("path"),this.options.className&&o.DomUtil.addClass(this._path,this.options.className),this._container.appendChild(this._path)},_initStyle:function(){this.options.stroke&&(this._path.setAttribute("stroke-linejoin","round"),this._path.setAttribute("stroke-linecap","round")),this.options.fill&&this._path.setAttribute("fill-rule","evenodd"),this.options.pointerEvents&&this._path.setAttribute("pointer-events",this.options.pointerEvents),this.options.clickable||this.options.pointerEvents||this._path.setAttribute("pointer-events","none"),this._updateStyle()},_updateStyle:function(){this.options.stroke?(this._path.setAttribute("stroke",this.options.color),this._path.setAttribute("stroke-opacity",this.options.opacity),this._path.setAttribute("stroke-width",this.options.weight),this.options.dashArray?this._path.setAttribute("stroke-dasharray",this.options.dashArray):this._path.removeAttribute("stroke-dasharray"),this.options.lineCap&&this._path.setAttribute("stroke-linecap",this.options.lineCap),this.options.lineJoin&&this._path.setAttribute("stroke-linejoin",this.options.lineJoin)):this._path.setAttribute("stroke","none"),this.options.fill?(this._path.setAttribute("fill",this.options.fillColor||this.options.color),this._path.setAttribute("fill-opacity",this.options.fillOpacity)):this._path.setAttribute("fill","none")},_updatePath:function(){var t=this.getPathString();t||(t="M0 0"),this._path.setAttribute("d",t)},_initEvents:function(){if(this.options.clickable){(o.Browser.svg||!o.Browser.vml)&&o.DomUtil.addClass(this._path,"leaflet-clickable"),o.DomEvent.on(this._container,"click",this._onMouseClick,this);for(var t=["dblclick","mousedown","mouseover","mouseout","mousemove","contextmenu"],e=0;e<t.length;e++)o.DomEvent.on(this._container,t[e],this._fireMouseEvent,this)}},_onMouseClick:function(t){this._map.dragging&&this._map.dragging.moved()||this._fireMouseEvent(t)},_fireMouseEvent:function(t){if(this.hasEventListeners(t.type)){var e=this._map,i=e.mouseEventToContainerPoint(t),n=e.containerPointToLayerPoint(i),s=e.layerPointToLatLng(n);this.fire(t.type,{latlng:s,layerPoint:n,containerPoint:i,originalEvent:t}),"contextmenu"===t.type&&o.DomEvent.preventDefault(t),"mousemove"!==t.type&&o.DomEvent.stopPropagation(t)}}}),o.Map.include({_initPathRoot:function(){this._pathRoot||(this._pathRoot=o.Path.prototype._createElement("svg"),this._panes.overlayPane.appendChild(this._pathRoot),this.options.zoomAnimation&&o.Browser.any3d?(o.DomUtil.addClass(this._pathRoot,"leaflet-zoom-animated"),this.on({zoomanim:this._animatePathZoom,zoomend:this._endPathZoom})):o.DomUtil.addClass(this._pathRoot,"leaflet-zoom-hide"),this.on("moveend",this._updateSvgViewport),this._updateSvgViewport())
+},_animatePathZoom:function(t){var e=this.getZoomScale(t.zoom),i=this._getCenterOffset(t.center)._multiplyBy(-e)._add(this._pathViewport.min);this._pathRoot.style[o.DomUtil.TRANSFORM]=o.DomUtil.getTranslateString(i)+" scale("+e+") ",this._pathZooming=!0},_endPathZoom:function(){this._pathZooming=!1},_updateSvgViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max,n=i.x-e.x,s=i.y-e.y,a=this._pathRoot,r=this._panes.overlayPane;o.Browser.mobileWebkit&&r.removeChild(a),o.DomUtil.setPosition(a,e),a.setAttribute("width",n),a.setAttribute("height",s),a.setAttribute("viewBox",[e.x,e.y,n,s].join(" ")),o.Browser.mobileWebkit&&r.appendChild(a)}}}),o.Path.include({bindPopup:function(t,e){return t instanceof o.Popup?this._popup=t:((!this._popup||e)&&(this._popup=new o.Popup(e,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on("click",this._openPopup,this).on("remove",this.closePopup,this),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this._popup=null,this.off("click",this._openPopup).off("remove",this.closePopup),this._popupHandlersAdded=!1),this},openPopup:function(t){return this._popup&&(t=t||this._latlng||this._latlngs[Math.floor(this._latlngs.length/2)],this._openPopup({latlng:t})),this},closePopup:function(){return this._popup&&this._popup._close(),this},_openPopup:function(t){this._popup.setLatLng(t.latlng),this._map.openPopup(this._popup)}}),o.Browser.vml=!o.Browser.svg&&function(){try{var t=e.createElement("div");t.innerHTML='<v:shape adj="1"/>';var i=t.firstChild;return i.style.behavior="url(#default#VML)",i&&"object"==typeof i.adj}catch(n){return!1}}(),o.Path=o.Browser.svg||!o.Browser.vml?o.Path:o.Path.extend({statics:{VML:!0,CLIP_PADDING:.02},_createElement:function(){try{return e.namespaces.add("lvml","urn:schemas-microsoft-com:vml"),function(t){return e.createElement("<lvml:"+t+' class="lvml">')}}catch(t){return function(t){return e.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),_initPath:function(){var t=this._container=this._createElement("shape");o.DomUtil.addClass(t,"leaflet-vml-shape"+(this.options.className?" "+this.options.className:"")),this.options.clickable&&o.DomUtil.addClass(t,"leaflet-clickable"),t.coordsize="1 1",this._path=this._createElement("path"),t.appendChild(this._path),this._map._pathRoot.appendChild(t)},_initStyle:function(){this._updateStyle()},_updateStyle:function(){var t=this._stroke,e=this._fill,i=this.options,n=this._container;n.stroked=i.stroke,n.filled=i.fill,i.stroke?(t||(t=this._stroke=this._createElement("stroke"),t.endcap="round",n.appendChild(t)),t.weight=i.weight+"px",t.color=i.color,t.opacity=i.opacity,t.dashStyle=i.dashArray?o.Util.isArray(i.dashArray)?i.dashArray.join(" "):i.dashArray.replace(/( *, *)/g," "):"",i.lineCap&&(t.endcap=i.lineCap.replace("butt","flat")),i.lineJoin&&(t.joinstyle=i.lineJoin)):t&&(n.removeChild(t),this._stroke=null),i.fill?(e||(e=this._fill=this._createElement("fill"),n.appendChild(e)),e.color=i.fillColor||i.color,e.opacity=i.fillOpacity):e&&(n.removeChild(e),this._fill=null)},_updatePath:function(){var t=this._container.style;t.display="none",this._path.v=this.getPathString()+" ",t.display=""}}),o.Map.include(o.Browser.svg||!o.Browser.vml?{}:{_initPathRoot:function(){if(!this._pathRoot){var t=this._pathRoot=e.createElement("div");t.className="leaflet-vml-container",this._panes.overlayPane.appendChild(t),this.on("moveend",this._updatePathViewport),this._updatePathViewport()}}}),o.Browser.canvas=function(){return!!e.createElement("canvas").getContext}(),o.Path=o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?o.Path:o.Path.extend({statics:{CANVAS:!0,SVG:!1},redraw:function(){return this._map&&(this.projectLatlngs(),this._requestUpdate()),this},setStyle:function(t){return o.setOptions(this,t),this._map&&(this._updateStyle(),this._requestUpdate()),this},onRemove:function(t){t.off("viewreset",this.projectLatlngs,this).off("moveend",this._updatePath,this),this.options.clickable&&(this._map.off("click",this._onClick,this),this._map.off("mousemove",this._onMouseMove,this)),this._requestUpdate(),this.fire("remove"),this._map=null},_requestUpdate:function(){this._map&&!o.Path._updateRequest&&(o.Path._updateRequest=o.Util.requestAnimFrame(this._fireMapMoveEnd,this._map))},_fireMapMoveEnd:function(){o.Path._updateRequest=null,this.fire("moveend")},_initElements:function(){this._map._initPathRoot(),this._ctx=this._map._canvasCtx},_updateStyle:function(){var t=this.options;t.stroke&&(this._ctx.lineWidth=t.weight,this._ctx.strokeStyle=t.color),t.fill&&(this._ctx.fillStyle=t.fillColor||t.color)},_drawPath:function(){var t,e,i,n,s,a;for(this._ctx.beginPath(),t=0,i=this._parts.length;i>t;t++){for(e=0,n=this._parts[t].length;n>e;e++)s=this._parts[t][e],a=(0===e?"move":"line")+"To",this._ctx[a](s.x,s.y);this instanceof o.Polygon&&this._ctx.closePath()}},_checkIfEmpty:function(){return!this._parts.length},_updatePath:function(){if(!this._checkIfEmpty()){var t=this._ctx,e=this.options;this._drawPath(),t.save(),this._updateStyle(),e.fill&&(t.globalAlpha=e.fillOpacity,t.fill()),e.stroke&&(t.globalAlpha=e.opacity,t.stroke()),t.restore()}},_initEvents:function(){this.options.clickable&&(this._map.on("mousemove",this._onMouseMove,this),this._map.on("click",this._onClick,this))},_onClick:function(t){this._containsPoint(t.layerPoint)&&this.fire("click",t)},_onMouseMove:function(t){this._map&&!this._map._animatingZoom&&(this._containsPoint(t.layerPoint)?(this._ctx.canvas.style.cursor="pointer",this._mouseInside=!0,this.fire("mouseover",t)):this._mouseInside&&(this._ctx.canvas.style.cursor="",this._mouseInside=!1,this.fire("mouseout",t)))}}),o.Map.include(o.Path.SVG&&!t.L_PREFER_CANVAS||!o.Browser.canvas?{}:{_initPathRoot:function(){var t,i=this._pathRoot;i||(i=this._pathRoot=e.createElement("canvas"),i.style.position="absolute",t=this._canvasCtx=i.getContext("2d"),t.lineCap="round",t.lineJoin="round",this._panes.overlayPane.appendChild(i),this.options.zoomAnimation&&(this._pathRoot.className="leaflet-zoom-animated",this.on("zoomanim",this._animatePathZoom),this.on("zoomend",this._endPathZoom)),this.on("moveend",this._updateCanvasViewport),this._updateCanvasViewport())},_updateCanvasViewport:function(){if(!this._pathZooming){this._updatePathViewport();var t=this._pathViewport,e=t.min,i=t.max.subtract(e),n=this._pathRoot;o.DomUtil.setPosition(n,e),n.width=i.x,n.height=i.y,n.getContext("2d").translate(-e.x,-e.y)}}}),o.LineUtil={simplify:function(t,e){if(!e||!t.length)return t.slice();var i=e*e;return t=this._reducePoints(t,i),t=this._simplifyDP(t,i)},pointToSegmentDistance:function(t,e,i){return Math.sqrt(this._sqClosestPointOnSegment(t,e,i,!0))},closestPointOnSegment:function(t,e,i){return this._sqClosestPointOnSegment(t,e,i)},_simplifyDP:function(t,e){var n=t.length,o=typeof Uint8Array!=i+""?Uint8Array:Array,s=new o(n);s[0]=s[n-1]=1,this._simplifyDPStep(t,s,e,0,n-1);var a,r=[];for(a=0;n>a;a++)s[a]&&r.push(t[a]);return r},_simplifyDPStep:function(t,e,i,n,o){var s,a,r,h=0;for(a=n+1;o-1>=a;a++)r=this._sqClosestPointOnSegment(t[a],t[n],t[o],!0),r>h&&(s=a,h=r);h>i&&(e[s]=1,this._simplifyDPStep(t,e,i,n,s),this._simplifyDPStep(t,e,i,s,o))},_reducePoints:function(t,e){for(var i=[t[0]],n=1,o=0,s=t.length;s>n;n++)this._sqDist(t[n],t[o])>e&&(i.push(t[n]),o=n);return s-1>o&&i.push(t[s-1]),i},clipSegment:function(t,e,i,n){var o,s,a,r=n?this._lastCode:this._getBitCode(t,i),h=this._getBitCode(e,i);for(this._lastCode=h;;){if(!(r|h))return[t,e];if(r&h)return!1;o=r||h,s=this._getEdgeIntersection(t,e,o,i),a=this._getBitCode(s,i),o===r?(t=s,r=a):(e=s,h=a)}},_getEdgeIntersection:function(t,e,i,n){var s=e.x-t.x,a=e.y-t.y,r=n.min,h=n.max;return 8&i?new o.Point(t.x+s*(h.y-t.y)/a,h.y):4&i?new o.Point(t.x+s*(r.y-t.y)/a,r.y):2&i?new o.Point(h.x,t.y+a*(h.x-t.x)/s):1&i?new o.Point(r.x,t.y+a*(r.x-t.x)/s):void 0},_getBitCode:function(t,e){var i=0;return t.x<e.min.x?i|=1:t.x>e.max.x&&(i|=2),t.y<e.min.y?i|=4:t.y>e.max.y&&(i|=8),i},_sqDist:function(t,e){var i=e.x-t.x,n=e.y-t.y;return i*i+n*n},_sqClosestPointOnSegment:function(t,e,i,n){var s,a=e.x,r=e.y,h=i.x-a,l=i.y-r,u=h*h+l*l;return u>0&&(s=((t.x-a)*h+(t.y-r)*l)/u,s>1?(a=i.x,r=i.y):s>0&&(a+=h*s,r+=l*s)),h=t.x-a,l=t.y-r,n?h*h+l*l:new o.Point(a,r)}},o.Polyline=o.Path.extend({initialize:function(t,e){o.Path.prototype.initialize.call(this,e),this._latlngs=this._convertLatLngs(t)},options:{smoothFactor:1,noClip:!1},projectLatlngs:function(){this._originalPoints=[];for(var t=0,e=this._latlngs.length;e>t;t++)this._originalPoints[t]=this._map.latLngToLayerPoint(this._latlngs[t])},getPathString:function(){for(var t=0,e=this._parts.length,i="";e>t;t++)i+=this._getPathPartStr(this._parts[t]);return i},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._latlngs=this._convertLatLngs(t),this.redraw()},addLatLng:function(t){return this._latlngs.push(o.latLng(t)),this.redraw()},spliceLatLngs:function(){var t=[].splice.apply(this._latlngs,arguments);return this._convertLatLngs(this._latlngs,!0),this.redraw(),t},closestLayerPoint:function(t){for(var e,i,n=1/0,s=this._parts,a=null,r=0,h=s.length;h>r;r++)for(var l=s[r],u=1,c=l.length;c>u;u++){e=l[u-1],i=l[u];var d=o.LineUtil._sqClosestPointOnSegment(t,e,i,!0);n>d&&(n=d,a=o.LineUtil._sqClosestPointOnSegment(t,e,i))}return a&&(a.distance=Math.sqrt(n)),a},getBounds:function(){return new o.LatLngBounds(this.getLatLngs())},_convertLatLngs:function(t,e){var i,n,s=e?t:[];for(i=0,n=t.length;n>i;i++){if(o.Util.isArray(t[i])&&"number"!=typeof t[i][0])return;s[i]=o.latLng(t[i])}return s},_initEvents:function(){o.Path.prototype._initEvents.call(this)},_getPathPartStr:function(t){for(var e,i=o.Path.VML,n=0,s=t.length,a="";s>n;n++)e=t[n],i&&e._round(),a+=(n?"L":"M")+e.x+" "+e.y;return a},_clipPoints:function(){var t,e,i,n=this._originalPoints,s=n.length;if(this.options.noClip)return void(this._parts=[n]);this._parts=[];var a=this._parts,r=this._map._pathViewport,h=o.LineUtil;for(t=0,e=0;s-1>t;t++)i=h.clipSegment(n[t],n[t+1],r,t),i&&(a[e]=a[e]||[],a[e].push(i[0]),(i[1]!==n[t+1]||t===s-2)&&(a[e].push(i[1]),e++))},_simplifyPoints:function(){for(var t=this._parts,e=o.LineUtil,i=0,n=t.length;n>i;i++)t[i]=e.simplify(t[i],this.options.smoothFactor)},_updatePath:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),o.Path.prototype._updatePath.call(this))}}),o.polyline=function(t,e){return new o.Polyline(t,e)},o.PolyUtil={},o.PolyUtil.clipPolygon=function(t,e){var i,n,s,a,r,h,l,u,c,d=[1,4,2,8],p=o.LineUtil;for(n=0,l=t.length;l>n;n++)t[n]._code=p._getBitCode(t[n],e);for(a=0;4>a;a++){for(u=d[a],i=[],n=0,l=t.length,s=l-1;l>n;s=n++)r=t[n],h=t[s],r._code&u?h._code&u||(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)):(h._code&u&&(c=p._getEdgeIntersection(h,r,u,e),c._code=p._getBitCode(c,e),i.push(c)),i.push(r));t=i}return t},o.Polygon=o.Polyline.extend({options:{fill:!0},initialize:function(t,e){o.Polyline.prototype.initialize.call(this,t,e),this._initWithHoles(t)},_initWithHoles:function(t){var e,i,n;if(t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0])for(this._latlngs=this._convertLatLngs(t[0]),this._holes=t.slice(1),e=0,i=this._holes.length;i>e;e++)n=this._holes[e]=this._convertLatLngs(this._holes[e]),n[0].equals(n[n.length-1])&&n.pop();t=this._latlngs,t.length>=2&&t[0].equals(t[t.length-1])&&t.pop()},projectLatlngs:function(){if(o.Polyline.prototype.projectLatlngs.call(this),this._holePoints=[],this._holes){var t,e,i,n;for(t=0,i=this._holes.length;i>t;t++)for(this._holePoints[t]=[],e=0,n=this._holes[t].length;n>e;e++)this._holePoints[t][e]=this._map.latLngToLayerPoint(this._holes[t][e])}},setLatLngs:function(t){return t&&o.Util.isArray(t[0])&&"number"!=typeof t[0][0]?(this._initWithHoles(t),this.redraw()):o.Polyline.prototype.setLatLngs.call(this,t)},_clipPoints:function(){var t=this._originalPoints,e=[];if(this._parts=[t].concat(this._holePoints),!this.options.noClip){for(var i=0,n=this._parts.length;n>i;i++){var s=o.PolyUtil.clipPolygon(this._parts[i],this._map._pathViewport);s.length&&e.push(s)}this._parts=e}},_getPathPartStr:function(t){var e=o.Polyline.prototype._getPathPartStr.call(this,t);return e+(o.Browser.svg?"z":"x")}}),o.polygon=function(t,e){return new o.Polygon(t,e)},function(){function t(t){return o.FeatureGroup.extend({initialize:function(t,e){this._layers={},this._options=e,this.setLatLngs(t)},setLatLngs:function(e){var i=0,n=e.length;for(this.eachLayer(function(t){n>i?t.setLatLngs(e[i++]):this.removeLayer(t)},this);n>i;)this.addLayer(new t(e[i++],this._options));return this},getLatLngs:function(){var t=[];return this.eachLayer(function(e){t.push(e.getLatLngs())}),t}})}o.MultiPolyline=t(o.Polyline),o.MultiPolygon=t(o.Polygon),o.multiPolyline=function(t,e){return new o.MultiPolyline(t,e)},o.multiPolygon=function(t,e){return new o.MultiPolygon(t,e)}}(),o.Rectangle=o.Polygon.extend({initialize:function(t,e){o.Polygon.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return t=o.latLngBounds(t),[t.getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}}),o.rectangle=function(t,e){return new o.Rectangle(t,e)},o.Circle=o.Path.extend({initialize:function(t,e,i){o.Path.prototype.initialize.call(this,i),this._latlng=o.latLng(t),this._mRadius=e},options:{fill:!0},setLatLng:function(t){return this._latlng=o.latLng(t),this.redraw()},setRadius:function(t){return this._mRadius=t,this.redraw()},projectLatlngs:function(){var t=this._getLngRadius(),e=this._latlng,i=this._map.latLngToLayerPoint([e.lat,e.lng-t]);this._point=this._map.latLngToLayerPoint(e),this._radius=Math.max(this._point.x-i.x,1)},getBounds:function(){var t=this._getLngRadius(),e=this._mRadius/40075017*360,i=this._latlng;return new o.LatLngBounds([i.lat-e,i.lng-t],[i.lat+e,i.lng+t])},getLatLng:function(){return this._latlng},getPathString:function(){var t=this._point,e=this._radius;return this._checkIfEmpty()?"":o.Browser.svg?"M"+t.x+","+(t.y-e)+"A"+e+","+e+",0,1,1,"+(t.x-.1)+","+(t.y-e)+" z":(t._round(),e=Math.round(e),"AL "+t.x+","+t.y+" "+e+","+e+" 0,23592600")},getRadius:function(){return this._mRadius},_getLatRadius:function(){return this._mRadius/40075017*360},_getLngRadius:function(){return this._getLatRadius()/Math.cos(o.LatLng.DEG_TO_RAD*this._latlng.lat)},_checkIfEmpty:function(){if(!this._map)return!1;var t=this._map._pathViewport,e=this._radius,i=this._point;return i.x-e>t.max.x||i.y-e>t.max.y||i.x+e<t.min.x||i.y+e<t.min.y}}),o.circle=function(t,e,i){return new o.Circle(t,e,i)},o.CircleMarker=o.Circle.extend({options:{radius:10,weight:2},initialize:function(t,e){o.Circle.prototype.initialize.call(this,t,null,e),this._radius=this.options.radius},projectLatlngs:function(){this._point=this._map.latLngToLayerPoint(this._latlng)},_updateStyle:function(){o.Circle.prototype._updateStyle.call(this),this.setRadius(this.options.radius)},setLatLng:function(t){return o.Circle.prototype.setLatLng.call(this,t),this._popup&&this._popup._isOpen&&this._popup.setLatLng(t),this},setRadius:function(t){return this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return this._radius}}),o.circleMarker=function(t,e){return new o.CircleMarker(t,e)},o.Polyline.include(o.Path.CANVAS?{_containsPoint:function(t,e){var i,n,s,a,r,h,l,u=this.options.weight/2;for(o.Browser.touch&&(u+=10),i=0,a=this._parts.length;a>i;i++)for(l=this._parts[i],n=0,r=l.length,s=r-1;r>n;s=n++)if((e||0!==n)&&(h=o.LineUtil.pointToSegmentDistance(t,l[s],l[n]),u>=h))return!0;return!1}}:{}),o.Polygon.include(o.Path.CANVAS?{_containsPoint:function(t){var e,i,n,s,a,r,h,l,u=!1;if(o.Polyline.prototype._containsPoint.call(this,t,!0))return!0;for(s=0,h=this._parts.length;h>s;s++)for(e=this._parts[s],a=0,l=e.length,r=l-1;l>a;r=a++)i=e[a],n=e[r],i.y>t.y!=n.y>t.y&&t.x<(n.x-i.x)*(t.y-i.y)/(n.y-i.y)+i.x&&(u=!u);return u}}:{}),o.Circle.include(o.Path.CANVAS?{_drawPath:function(){var t=this._point;this._ctx.beginPath(),this._ctx.arc(t.x,t.y,this._radius,0,2*Math.PI,!1)},_containsPoint:function(t){var e=this._point,i=this.options.stroke?this.options.weight/2:0;return t.distanceTo(e)<=this._radius+i}}:{}),o.CircleMarker.include(o.Path.CANVAS?{_updateStyle:function(){o.Path.prototype._updateStyle.call(this)}}:{}),o.GeoJSON=o.FeatureGroup.extend({initialize:function(t,e){o.setOptions(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,i,n,s=o.Util.isArray(t)?t:t.features;if(s){for(e=0,i=s.length;i>e;e++)n=s[e],(n.geometries||n.geometry||n.features||n.coordinates)&&this.addData(s[e]);return this}var a=this.options;if(!a.filter||a.filter(t)){var r=o.GeoJSON.geometryToLayer(t,a.pointToLayer,a.coordsToLatLng,a);return r.feature=o.GeoJSON.asFeature(t),r.defaultOptions=r.options,this.resetStyle(r),a.onEachFeature&&a.onEachFeature(t,r),this.addLayer(r)}},resetStyle:function(t){var e=this.options.style;e&&(o.Util.extend(t.options,t.defaultOptions),this._setLayerStyle(t,e))},setStyle:function(t){this.eachLayer(function(e){this._setLayerStyle(e,t)},this)},_setLayerStyle:function(t,e){"function"==typeof e&&(e=e(t.feature)),t.setStyle&&t.setStyle(e)}}),o.extend(o.GeoJSON,{geometryToLayer:function(t,e,i,n){var s,a,r,h,l="Feature"===t.type?t.geometry:t,u=l.coordinates,c=[];switch(i=i||this.coordsToLatLng,l.type){case"Point":return s=i(u),e?e(t,s):new o.Marker(s);case"MultiPoint":for(r=0,h=u.length;h>r;r++)s=i(u[r]),c.push(e?e(t,s):new o.Marker(s));return new o.FeatureGroup(c);case"LineString":return a=this.coordsToLatLngs(u,0,i),new o.Polyline(a,n);case"Polygon":if(2===u.length&&!u[1].length)throw new Error("Invalid GeoJSON object.");return a=this.coordsToLatLngs(u,1,i),new o.Polygon(a,n);case"MultiLineString":return a=this.coordsToLatLngs(u,1,i),new o.MultiPolyline(a,n);case"MultiPolygon":return a=this.coordsToLatLngs(u,2,i),new o.MultiPolygon(a,n);case"GeometryCollection":for(r=0,h=l.geometries.length;h>r;r++)c.push(this.geometryToLayer({geometry:l.geometries[r],type:"Feature",properties:t.properties},e,i,n));return new o.FeatureGroup(c);default:throw new Error("Invalid GeoJSON object.")}},coordsToLatLng:function(t){return new o.LatLng(t[1],t[0],t[2])},coordsToLatLngs:function(t,e,i){var n,o,s,a=[];for(o=0,s=t.length;s>o;o++)n=e?this.coordsToLatLngs(t[o],e-1,i):(i||this.coordsToLatLng)(t[o]),a.push(n);return a},latLngToCoords:function(t){var e=[t.lng,t.lat];return t.alt!==i&&e.push(t.alt),e},latLngsToCoords:function(t){for(var e=[],i=0,n=t.length;n>i;i++)e.push(o.GeoJSON.latLngToCoords(t[i]));return e},getFeature:function(t,e){return t.feature?o.extend({},t.feature,{geometry:e}):o.GeoJSON.asFeature(e)},asFeature:function(t){return"Feature"===t.type?t:{type:"Feature",properties:{},geometry:t}}});var a={toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"Point",coordinates:o.GeoJSON.latLngToCoords(this.getLatLng())})}};o.Marker.include(a),o.Circle.include(a),o.CircleMarker.include(a),o.Polyline.include({toGeoJSON:function(){return o.GeoJSON.getFeature(this,{type:"LineString",coordinates:o.GeoJSON.latLngsToCoords(this.getLatLngs())})}}),o.Polygon.include({toGeoJSON:function(){var t,e,i,n=[o.GeoJSON.latLngsToCoords(this.getLatLngs())];if(n[0].push(n[0][0]),this._holes)for(t=0,e=this._holes.length;e>t;t++)i=o.GeoJSON.latLngsToCoords(this._holes[t]),i.push(i[0]),n.push(i);return o.GeoJSON.getFeature(this,{type:"Polygon",coordinates:n})}}),function(){function t(t){return function(){var e=[];return this.eachLayer(function(t){e.push(t.toGeoJSON().geometry.coordinates)}),o.GeoJSON.getFeature(this,{type:t,coordinates:e})}}o.MultiPolyline.include({toGeoJSON:t("MultiLineString")}),o.MultiPolygon.include({toGeoJSON:t("MultiPolygon")}),o.LayerGroup.include({toGeoJSON:function(){var e,i=this.feature&&this.feature.geometry,n=[];if(i&&"MultiPoint"===i.type)return t("MultiPoint").call(this);var s=i&&"GeometryCollection"===i.type;return this.eachLayer(function(t){t.toGeoJSON&&(e=t.toGeoJSON(),n.push(s?e.geometry:o.GeoJSON.asFeature(e)))}),s?o.GeoJSON.getFeature(this,{geometries:n,type:"GeometryCollection"}):{type:"FeatureCollection",features:n}}})}(),o.geoJson=function(t,e){return new o.GeoJSON(t,e)},o.DomEvent={addListener:function(t,e,i,n){var s,a,r,h=o.stamp(i),l="_leaflet_"+e+h;return t[l]?this:(s=function(e){return i.call(n||t,e||o.DomEvent._getEvent())},o.Browser.pointer&&0===e.indexOf("touch")?this.addPointerListener(t,e,s,h):(o.Browser.touch&&"dblclick"===e&&this.addDoubleTapListener&&this.addDoubleTapListener(t,s,h),"addEventListener"in t?"mousewheel"===e?(t.addEventListener("DOMMouseScroll",s,!1),t.addEventListener(e,s,!1)):"mouseenter"===e||"mouseleave"===e?(a=s,r="mouseenter"===e?"mouseover":"mouseout",s=function(e){return o.DomEvent._checkMouse(t,e)?a(e):void 0},t.addEventListener(r,s,!1)):"click"===e&&o.Browser.android?(a=s,s=function(t){return o.DomEvent._filterClick(t,a)},t.addEventListener(e,s,!1)):t.addEventListener(e,s,!1):"attachEvent"in t&&t.attachEvent("on"+e,s),t[l]=s,this))},removeListener:function(t,e,i){var n=o.stamp(i),s="_leaflet_"+e+n,a=t[s];return a?(o.Browser.pointer&&0===e.indexOf("touch")?this.removePointerListener(t,e,n):o.Browser.touch&&"dblclick"===e&&this.removeDoubleTapListener?this.removeDoubleTapListener(t,n):"removeEventListener"in t?"mousewheel"===e?(t.removeEventListener("DOMMouseScroll",a,!1),t.removeEventListener(e,a,!1)):"mouseenter"===e||"mouseleave"===e?t.removeEventListener("mouseenter"===e?"mouseover":"mouseout",a,!1):t.removeEventListener(e,a,!1):"detachEvent"in t&&t.detachEvent("on"+e,a),t[s]=null,this):this},stopPropagation:function(t){return t.stopPropagation?t.stopPropagation():t.cancelBubble=!0,o.DomEvent._skipped(t),this},disableScrollPropagation:function(t){var e=o.DomEvent.stopPropagation;return o.DomEvent.on(t,"mousewheel",e).on(t,"MozMousePixelScroll",e)},disableClickPropagation:function(t){for(var e=o.DomEvent.stopPropagation,i=o.Draggable.START.length-1;i>=0;i--)o.DomEvent.on(t,o.Draggable.START[i],e);return o.DomEvent.on(t,"click",o.DomEvent._fakeStop).on(t,"dblclick",e)},preventDefault:function(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this},stop:function(t){return o.DomEvent.preventDefault(t).stopPropagation(t)},getMousePosition:function(t,e){if(!e)return new o.Point(t.clientX,t.clientY);var i=e.getBoundingClientRect();return new o.Point(t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop)},getWheelDelta:function(t){var e=0;return t.wheelDelta&&(e=t.wheelDelta/120),t.detail&&(e=-t.detail/3),e},_skipEvents:{},_fakeStop:function(t){o.DomEvent._skipEvents[t.type]=!0},_skipped:function(t){var e=this._skipEvents[t.type];return this._skipEvents[t.type]=!1,e},_checkMouse:function(t,e){var i=e.relatedTarget;if(!i)return!0;try{for(;i&&i!==t;)i=i.parentNode}catch(n){return!1}return i!==t},_getEvent:function(){var e=t.event;if(!e)for(var i=arguments.callee.caller;i&&(e=i.arguments[0],!e||t.Event!==e.constructor);)i=i.caller;return e},_filterClick:function(t,e){var i=t.timeStamp||t.originalEvent.timeStamp,n=o.DomEvent._lastClick&&i-o.DomEvent._lastClick;return n&&n>100&&500>n||t.target._simulatedClick&&!t._simulated?void o.DomEvent.stop(t):(o.DomEvent._lastClick=i,e(t))}},o.DomEvent.on=o.DomEvent.addListener,o.DomEvent.off=o.DomEvent.removeListener,o.Draggable=o.Class.extend({includes:o.Mixin.Events,statics:{START:o.Browser.touch?["touchstart","mousedown"]:["mousedown"],END:{mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},MOVE:{mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"}},initialize:function(t,e){this._element=t,this._dragStartTarget=e||t},enable:function(){if(!this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.on(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!0}},disable:function(){if(this._enabled){for(var t=o.Draggable.START.length-1;t>=0;t--)o.DomEvent.off(this._dragStartTarget,o.Draggable.START[t],this._onDown,this);this._enabled=!1,this._moved=!1}},_onDown:function(t){if(this._moved=!1,!(t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(o.DomEvent.stopPropagation(t),o.Draggable._disabled||(o.DomUtil.disableImageDrag(),o.DomUtil.disableTextSelection(),this._moving)))){var i=t.touches?t.touches[0]:t;this._startPoint=new o.Point(i.clientX,i.clientY),this._startPos=this._newPos=o.DomUtil.getPosition(this._element),o.DomEvent.on(e,o.Draggable.MOVE[t.type],this._onMove,this).on(e,o.Draggable.END[t.type],this._onUp,this)}},_onMove:function(t){if(t.touches&&t.touches.length>1)return void(this._moved=!0);var i=t.touches&&1===t.touches.length?t.touches[0]:t,n=new o.Point(i.clientX,i.clientY),s=n.subtract(this._startPoint);(s.x||s.y)&&(o.Browser.touch&&Math.abs(s.x)+Math.abs(s.y)<3||(o.DomEvent.preventDefault(t),this._moved||(this.fire("dragstart"),this._moved=!0,this._startPos=o.DomUtil.getPosition(this._element).subtract(s),o.DomUtil.addClass(e.body,"leaflet-dragging"),this._lastTarget=t.target||t.srcElement,o.DomUtil.addClass(this._lastTarget,"leaflet-drag-target")),this._newPos=this._startPos.add(s),this._moving=!0,o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updatePosition,this,!0,this._dragStartTarget)))},_updatePosition:function(){this.fire("predrag"),o.DomUtil.setPosition(this._element,this._newPos),this.fire("drag")},_onUp:function(){o.DomUtil.removeClass(e.body,"leaflet-dragging"),this._lastTarget&&(o.DomUtil.removeClass(this._lastTarget,"leaflet-drag-target"),this._lastTarget=null);for(var t in o.Draggable.MOVE)o.DomEvent.off(e,o.Draggable.MOVE[t],this._onMove).off(e,o.Draggable.END[t],this._onUp);o.DomUtil.enableImageDrag(),o.DomUtil.enableTextSelection(),this._moved&&this._moving&&(o.Util.cancelAnimFrame(this._animRequest),this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})),this._moving=!1}}),o.Handler=o.Class.extend({initialize:function(t){this._map=t},enable:function(){this._enabled||(this._enabled=!0,this.addHooks())},disable:function(){this._enabled&&(this._enabled=!1,this.removeHooks())},enabled:function(){return!!this._enabled}}),o.Map.mergeOptions({dragging:!0,inertia:!o.Browser.android23,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,inertiaThreshold:o.Browser.touch?32:18,easeLinearity:.25,worldCopyJump:!1}),o.Map.Drag=o.Handler.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new o.Draggable(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDrag,this),t.on("viewreset",this._onViewReset,this),t.whenReady(this._onViewReset,this))}this._draggable.enable()},removeHooks:function(){this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){var t=this._map;t._panAnim&&t._panAnim.stop(),t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(){if(this._map.options.inertia){var t=this._lastTime=+new Date,e=this._lastPos=this._draggable._newPos;this._positions.push(e),this._times.push(t),t-this._times[0]>200&&(this._positions.shift(),this._times.shift())}this._map.fire("move").fire("drag")},_onViewReset:function(){var t=this._map.getSize()._divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.project([0,180]).x},_onPreDrag:function(){var t=this._worldWidth,e=Math.round(t/2),i=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-e+i)%t+e-i,s=(n+e+i)%t-e-i,a=Math.abs(o+i)<Math.abs(s+i)?o:s;this._draggable._newPos.x=a},_onDragEnd:function(t){var e=this._map,i=e.options,n=+new Date-this._lastTime,s=!i.inertia||n>i.inertiaThreshold||!this._positions[0];if(e.fire("dragend",t),s)e.fire("moveend");else{var a=this._lastPos.subtract(this._positions[0]),r=(this._lastTime+n-this._times[0])/1e3,h=i.easeLinearity,l=a.multiplyBy(h/r),u=l.distanceTo([0,0]),c=Math.min(i.inertiaMaxSpeed,u),d=l.multiplyBy(c/u),p=c/(i.inertiaDeceleration*h),_=d.multiplyBy(-p/2).round();_.x&&_.y?(_=e._limitOffset(_,e.options.maxBounds),o.Util.requestAnimFrame(function(){e.panBy(_,{duration:p,easeLinearity:h,noMoveStart:!0})})):e.fire("moveend")}}}),o.Map.addInitHook("addHandler","dragging",o.Map.Drag),o.Map.mergeOptions({doubleClickZoom:!0}),o.Map.DoubleClickZoom=o.Handler.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,i=e.getZoom()+(t.originalEvent.shiftKey?-1:1);"center"===e.options.doubleClickZoom?e.setZoom(i):e.setZoomAround(t.containerPoint,i)}}),o.Map.addInitHook("addHandler","doubleClickZoom",o.Map.DoubleClickZoom),o.Map.mergeOptions({scrollWheelZoom:!0}),o.Map.ScrollWheelZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"mousewheel",this._onWheelScroll,this),o.DomEvent.on(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault),this._delta=0},removeHooks:function(){o.DomEvent.off(this._map._container,"mousewheel",this._onWheelScroll),o.DomEvent.off(this._map._container,"MozMousePixelScroll",o.DomEvent.preventDefault)},_onWheelScroll:function(t){var e=o.DomEvent.getWheelDelta(t);this._delta+=e,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var i=Math.max(40-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o.bind(this._performZoom,this),i),o.DomEvent.preventDefault(t),o.DomEvent.stopPropagation(t)},_performZoom:function(){var t=this._map,e=this._delta,i=t.getZoom();e=e>0?Math.ceil(e):Math.floor(e),e=Math.max(Math.min(e,4),-4),e=t._limitZoom(i+e)-i,this._delta=0,this._startTime=null,e&&("center"===t.options.scrollWheelZoom?t.setZoom(i+e):t.setZoomAround(this._lastMousePos,i+e))}}),o.Map.addInitHook("addHandler","scrollWheelZoom",o.Map.ScrollWheelZoom),o.extend(o.DomEvent,{_touchstart:o.Browser.msPointer?"MSPointerDown":o.Browser.pointer?"pointerdown":"touchstart",_touchend:o.Browser.msPointer?"MSPointerUp":o.Browser.pointer?"pointerup":"touchend",addDoubleTapListener:function(t,i,n){function s(t){var e;if(o.Browser.pointer?(_.push(t.pointerId),e=_.length):e=t.touches.length,!(e>1)){var i=Date.now(),n=i-(r||i);h=t.touches?t.touches[0]:t,l=n>0&&u>=n,r=i}}function a(t){if(o.Browser.pointer){var e=_.indexOf(t.pointerId);if(-1===e)return;_.splice(e,1)}if(l){if(o.Browser.pointer){var n,s={};for(var a in h)n=h[a],s[a]="function"==typeof n?n.bind(h):n;h=s}h.type="dblclick",i(h),r=null}}var r,h,l=!1,u=250,c="_leaflet_",d=this._touchstart,p=this._touchend,_=[];t[c+d+n]=s,t[c+p+n]=a;var m=o.Browser.pointer?e.documentElement:t;return t.addEventListener(d,s,!1),m.addEventListener(p,a,!1),o.Browser.pointer&&m.addEventListener(o.DomEvent.POINTER_CANCEL,a,!1),this},removeDoubleTapListener:function(t,i){var n="_leaflet_";return t.removeEventListener(this._touchstart,t[n+this._touchstart+i],!1),(o.Browser.pointer?e.documentElement:t).removeEventListener(this._touchend,t[n+this._touchend+i],!1),o.Browser.pointer&&e.documentElement.removeEventListener(o.DomEvent.POINTER_CANCEL,t[n+this._touchend+i],!1),this}}),o.extend(o.DomEvent,{POINTER_DOWN:o.Browser.msPointer?"MSPointerDown":"pointerdown",POINTER_MOVE:o.Browser.msPointer?"MSPointerMove":"pointermove",POINTER_UP:o.Browser.msPointer?"MSPointerUp":"pointerup",POINTER_CANCEL:o.Browser.msPointer?"MSPointerCancel":"pointercancel",_pointers:[],_pointerDocumentListener:!1,addPointerListener:function(t,e,i,n){switch(e){case"touchstart":return this.addPointerListenerStart(t,e,i,n);case"touchend":return this.addPointerListenerEnd(t,e,i,n);case"touchmove":return this.addPointerListenerMove(t,e,i,n);default:throw"Unknown touch event type"}},addPointerListenerStart:function(t,i,n,s){var a="_leaflet_",r=this._pointers,h=function(t){o.DomEvent.preventDefault(t);for(var e=!1,i=0;i<r.length;i++)if(r[i].pointerId===t.pointerId){e=!0;
+break}e||r.push(t),t.touches=r.slice(),t.changedTouches=[t],n(t)};if(t[a+"touchstart"+s]=h,t.addEventListener(this.POINTER_DOWN,h,!1),!this._pointerDocumentListener){var l=function(t){for(var e=0;e<r.length;e++)if(r[e].pointerId===t.pointerId){r.splice(e,1);break}};e.documentElement.addEventListener(this.POINTER_UP,l,!1),e.documentElement.addEventListener(this.POINTER_CANCEL,l,!1),this._pointerDocumentListener=!0}return this},addPointerListenerMove:function(t,e,i,n){function o(t){if(t.pointerType!==t.MSPOINTER_TYPE_MOUSE&&"mouse"!==t.pointerType||0!==t.buttons){for(var e=0;e<a.length;e++)if(a[e].pointerId===t.pointerId){a[e]=t;break}t.touches=a.slice(),t.changedTouches=[t],i(t)}}var s="_leaflet_",a=this._pointers;return t[s+"touchmove"+n]=o,t.addEventListener(this.POINTER_MOVE,o,!1),this},addPointerListenerEnd:function(t,e,i,n){var o="_leaflet_",s=this._pointers,a=function(t){for(var e=0;e<s.length;e++)if(s[e].pointerId===t.pointerId){s.splice(e,1);break}t.touches=s.slice(),t.changedTouches=[t],i(t)};return t[o+"touchend"+n]=a,t.addEventListener(this.POINTER_UP,a,!1),t.addEventListener(this.POINTER_CANCEL,a,!1),this},removePointerListener:function(t,e,i){var n="_leaflet_",o=t[n+e+i];switch(e){case"touchstart":t.removeEventListener(this.POINTER_DOWN,o,!1);break;case"touchmove":t.removeEventListener(this.POINTER_MOVE,o,!1);break;case"touchend":t.removeEventListener(this.POINTER_UP,o,!1),t.removeEventListener(this.POINTER_CANCEL,o,!1)}return this}}),o.Map.mergeOptions({touchZoom:o.Browser.touch&&!o.Browser.android23,bounceAtZoomLimits:!0}),o.Map.TouchZoom=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var n=i.mouseEventToLayerPoint(t.touches[0]),s=i.mouseEventToLayerPoint(t.touches[1]),a=i._getCenterLayerPoint();this._startCenter=n.add(s)._divideBy(2),this._startDist=n.distanceTo(s),this._moved=!1,this._zooming=!0,this._centerOffset=a.subtract(this._startCenter),i._panAnim&&i._panAnim.stop(),o.DomEvent.on(e,"touchmove",this._onTouchMove,this).on(e,"touchend",this._onTouchEnd,this),o.DomEvent.preventDefault(t)}},_onTouchMove:function(t){var e=this._map;if(t.touches&&2===t.touches.length&&this._zooming){var i=e.mouseEventToLayerPoint(t.touches[0]),n=e.mouseEventToLayerPoint(t.touches[1]);this._scale=i.distanceTo(n)/this._startDist,this._delta=i._add(n)._divideBy(2)._subtract(this._startCenter),1!==this._scale&&(e.options.bounceAtZoomLimits||!(e.getZoom()===e.getMinZoom()&&this._scale<1||e.getZoom()===e.getMaxZoom()&&this._scale>1))&&(this._moved||(o.DomUtil.addClass(e._mapPane,"leaflet-touching"),e.fire("movestart").fire("zoomstart"),this._moved=!0),o.Util.cancelAnimFrame(this._animRequest),this._animRequest=o.Util.requestAnimFrame(this._updateOnMove,this,!0,this._map._container),o.DomEvent.preventDefault(t))}},_updateOnMove:function(){var t=this._map,e=this._getScaleOrigin(),i=t.layerPointToLatLng(e),n=t.getScaleZoom(this._scale);t._animateZoom(i,n,this._startCenter,this._scale,this._delta,!1,!0)},_onTouchEnd:function(){if(!this._moved||!this._zooming)return void(this._zooming=!1);var t=this._map;this._zooming=!1,o.DomUtil.removeClass(t._mapPane,"leaflet-touching"),o.Util.cancelAnimFrame(this._animRequest),o.DomEvent.off(e,"touchmove",this._onTouchMove).off(e,"touchend",this._onTouchEnd);var i=this._getScaleOrigin(),n=t.layerPointToLatLng(i),s=t.getZoom(),a=t.getScaleZoom(this._scale)-s,r=a>0?Math.ceil(a):Math.floor(a),h=t._limitZoom(s+r),l=t.getZoomScale(h)/this._scale;t._animateZoom(n,h,i,l)},_getScaleOrigin:function(){var t=this._centerOffset.subtract(this._delta).divideBy(this._scale);return this._startCenter.add(t)}}),o.Map.addInitHook("addHandler","touchZoom",o.Map.TouchZoom),o.Map.mergeOptions({tap:!0,tapTolerance:15}),o.Map.Tap=o.Handler.extend({addHooks:function(){o.DomEvent.on(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){o.DomEvent.off(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(o.DomEvent.preventDefault(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var i=t.touches[0],n=i.target;this._startPos=this._newPos=new o.Point(i.clientX,i.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.addClass(n,"leaflet-active"),this._holdTimeout=setTimeout(o.bind(function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",i))},this),1e3),o.DomEvent.on(e,"touchmove",this._onMove,this).on(e,"touchend",this._onUp,this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),o.DomEvent.off(e,"touchmove",this._onMove,this).off(e,"touchend",this._onUp,this),this._fireClick&&t&&t.changedTouches){var i=t.changedTouches[0],n=i.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&o.DomUtil.removeClass(n,"leaflet-active"),this._isTapValid()&&this._simulateEvent("click",i)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new o.Point(e.clientX,e.clientY)},_simulateEvent:function(i,n){var o=e.createEvent("MouseEvents");o._simulated=!0,n.target._simulatedClick=!0,o.initMouseEvent(i,!0,!0,t,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(o)}}),o.Browser.touch&&!o.Browser.pointer&&o.Map.addInitHook("addHandler","tap",o.Map.Tap),o.Map.mergeOptions({boxZoom:!0}),o.Map.BoxZoom=o.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._moved=!1},addHooks:function(){o.DomEvent.on(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){o.DomEvent.off(this._container,"mousedown",this._onMouseDown),this._moved=!1},moved:function(){return this._moved},_onMouseDown:function(t){return this._moved=!1,!t.shiftKey||1!==t.which&&1!==t.button?!1:(o.DomUtil.disableTextSelection(),o.DomUtil.disableImageDrag(),this._startLayerPoint=this._map.mouseEventToLayerPoint(t),void o.DomEvent.on(e,"mousemove",this._onMouseMove,this).on(e,"mouseup",this._onMouseUp,this).on(e,"keydown",this._onKeyDown,this))},_onMouseMove:function(t){this._moved||(this._box=o.DomUtil.create("div","leaflet-zoom-box",this._pane),o.DomUtil.setPosition(this._box,this._startLayerPoint),this._container.style.cursor="crosshair",this._map.fire("boxzoomstart"));var e=this._startLayerPoint,i=this._box,n=this._map.mouseEventToLayerPoint(t),s=n.subtract(e),a=new o.Point(Math.min(n.x,e.x),Math.min(n.y,e.y));o.DomUtil.setPosition(i,a),this._moved=!0,i.style.width=Math.max(0,Math.abs(s.x)-4)+"px",i.style.height=Math.max(0,Math.abs(s.y)-4)+"px"},_finish:function(){this._moved&&(this._pane.removeChild(this._box),this._container.style.cursor=""),o.DomUtil.enableTextSelection(),o.DomUtil.enableImageDrag(),o.DomEvent.off(e,"mousemove",this._onMouseMove).off(e,"mouseup",this._onMouseUp).off(e,"keydown",this._onKeyDown)},_onMouseUp:function(t){this._finish();var e=this._map,i=e.mouseEventToLayerPoint(t);if(!this._startLayerPoint.equals(i)){var n=new o.LatLngBounds(e.layerPointToLatLng(this._startLayerPoint),e.layerPointToLatLng(i));e.fitBounds(n),e.fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}}),o.Map.addInitHook("addHandler","boxZoom",o.Map.BoxZoom),o.Map.mergeOptions({keyboard:!0,keyboardPanOffset:80,keyboardZoomOffset:1}),o.Map.Keyboard=o.Handler.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,173]},initialize:function(t){this._map=t,this._setPanOffset(t.options.keyboardPanOffset),this._setZoomOffset(t.options.keyboardZoomOffset)},addHooks:function(){var t=this._map._container;-1===t.tabIndex&&(t.tabIndex="0"),o.DomEvent.on(t,"focus",this._onFocus,this).on(t,"blur",this._onBlur,this).on(t,"mousedown",this._onMouseDown,this),this._map.on("focus",this._addHooks,this).on("blur",this._removeHooks,this)},removeHooks:function(){this._removeHooks();var t=this._map._container;o.DomEvent.off(t,"focus",this._onFocus,this).off(t,"blur",this._onBlur,this).off(t,"mousedown",this._onMouseDown,this),this._map.off("focus",this._addHooks,this).off("blur",this._removeHooks,this)},_onMouseDown:function(){if(!this._focused){var i=e.body,n=e.documentElement,o=i.scrollTop||n.scrollTop,s=i.scrollLeft||n.scrollLeft;this._map._container.focus(),t.scrollTo(s,o)}},_onFocus:function(){this._focused=!0,this._map.fire("focus")},_onBlur:function(){this._focused=!1,this._map.fire("blur")},_setPanOffset:function(t){var e,i,n=this._panKeys={},o=this.keyCodes;for(e=0,i=o.left.length;i>e;e++)n[o.left[e]]=[-1*t,0];for(e=0,i=o.right.length;i>e;e++)n[o.right[e]]=[t,0];for(e=0,i=o.down.length;i>e;e++)n[o.down[e]]=[0,t];for(e=0,i=o.up.length;i>e;e++)n[o.up[e]]=[0,-1*t]},_setZoomOffset:function(t){var e,i,n=this._zoomKeys={},o=this.keyCodes;for(e=0,i=o.zoomIn.length;i>e;e++)n[o.zoomIn[e]]=t;for(e=0,i=o.zoomOut.length;i>e;e++)n[o.zoomOut[e]]=-t},_addHooks:function(){o.DomEvent.on(e,"keydown",this._onKeyDown,this)},_removeHooks:function(){o.DomEvent.off(e,"keydown",this._onKeyDown,this)},_onKeyDown:function(t){var e=t.keyCode,i=this._map;if(e in this._panKeys){if(i._panAnim&&i._panAnim._inProgress)return;i.panBy(this._panKeys[e]),i.options.maxBounds&&i.panInsideBounds(i.options.maxBounds)}else{if(!(e in this._zoomKeys))return;i.setZoom(i.getZoom()+this._zoomKeys[e])}o.DomEvent.stop(t)}}),o.Map.addInitHook("addHandler","keyboard",o.Map.Keyboard),o.Handler.MarkerDrag=o.Handler.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new o.Draggable(t,t)),this._draggable.on("dragstart",this._onDragStart,this).on("drag",this._onDrag,this).on("dragend",this._onDragEnd,this),this._draggable.enable(),o.DomUtil.addClass(this._marker._icon,"leaflet-marker-draggable")},removeHooks:function(){this._draggable.off("dragstart",this._onDragStart,this).off("drag",this._onDrag,this).off("dragend",this._onDragEnd,this),this._draggable.disable(),o.DomUtil.removeClass(this._marker._icon,"leaflet-marker-draggable")},moved:function(){return this._draggable&&this._draggable._moved},_onDragStart:function(){this._marker.closePopup().fire("movestart").fire("dragstart")},_onDrag:function(){var t=this._marker,e=t._shadow,i=o.DomUtil.getPosition(t._icon),n=t._map.layerPointToLatLng(i);e&&o.DomUtil.setPosition(e,i),t._latlng=n,t.fire("move",{latlng:n}).fire("drag")},_onDragEnd:function(t){this._marker.fire("moveend").fire("dragend",t)}}),o.Control=o.Class.extend({options:{position:"topright"},initialize:function(t){o.setOptions(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this._map=t;var e=this._container=this.onAdd(t),i=this.getPosition(),n=t._controlCorners[i];return o.DomUtil.addClass(e,"leaflet-control"),-1!==i.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e),this},removeFrom:function(t){var e=this.getPosition(),i=t._controlCorners[e];return i.removeChild(this._container),this._map=null,this.onRemove&&this.onRemove(t),this},_refocusOnMap:function(){this._map&&this._map.getContainer().focus()}}),o.control=function(t){return new o.Control(t)},o.Map.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.removeFrom(this),this},_initControlPos:function(){function t(t,s){var a=i+t+" "+i+s;e[t+s]=o.DomUtil.create("div",a,n)}var e=this._controlCorners={},i="leaflet-",n=this._controlContainer=o.DomUtil.create("div",i+"control-container",this._container);t("top","left"),t("top","right"),t("bottom","left"),t("bottom","right")},_clearControlPos:function(){this._container.removeChild(this._controlContainer)}}),o.Control.Zoom=o.Control.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"-",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",i=o.DomUtil.create("div",e+" leaflet-bar");return this._map=t,this._zoomInButton=this._createButton(this.options.zoomInText,this.options.zoomInTitle,e+"-in",i,this._zoomIn,this),this._zoomOutButton=this._createButton(this.options.zoomOutText,this.options.zoomOutTitle,e+"-out",i,this._zoomOut,this),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),i},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},_zoomIn:function(t){this._map.zoomIn(t.shiftKey?3:1)},_zoomOut:function(t){this._map.zoomOut(t.shiftKey?3:1)},_createButton:function(t,e,i,n,s,a){var r=o.DomUtil.create("a",i,n);r.innerHTML=t,r.href="#",r.title=e;var h=o.DomEvent.stopPropagation;return o.DomEvent.on(r,"click",h).on(r,"mousedown",h).on(r,"dblclick",h).on(r,"click",o.DomEvent.preventDefault).on(r,"click",s,a).on(r,"click",this._refocusOnMap,a),r},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";o.DomUtil.removeClass(this._zoomInButton,e),o.DomUtil.removeClass(this._zoomOutButton,e),t._zoom===t.getMinZoom()&&o.DomUtil.addClass(this._zoomOutButton,e),t._zoom===t.getMaxZoom()&&o.DomUtil.addClass(this._zoomInButton,e)}}),o.Map.mergeOptions({zoomControl:!0}),o.Map.addInitHook(function(){this.options.zoomControl&&(this.zoomControl=new o.Control.Zoom,this.addControl(this.zoomControl))}),o.control.zoom=function(t){return new o.Control.Zoom(t)},o.Control.Attribution=o.Control.extend({options:{position:"bottomright",prefix:'<a href="http://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>'},initialize:function(t){o.setOptions(this,t),this._attributions={}},onAdd:function(t){this._container=o.DomUtil.create("div","leaflet-control-attribution"),o.DomEvent.disableClickPropagation(this._container);for(var e in t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return t.on("layeradd",this._onLayerAdd,this).on("layerremove",this._onLayerRemove,this),this._update(),this._container},onRemove:function(t){t.off("layeradd",this._onLayerAdd).off("layerremove",this._onLayerRemove)},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):void 0},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):void 0},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var i=[];this.options.prefix&&i.push(this.options.prefix),t.length&&i.push(t.join(", ")),this._container.innerHTML=i.join(" | ")}},_onLayerAdd:function(t){t.layer.getAttribution&&this.addAttribution(t.layer.getAttribution())},_onLayerRemove:function(t){t.layer.getAttribution&&this.removeAttribution(t.layer.getAttribution())}}),o.Map.mergeOptions({attributionControl:!0}),o.Map.addInitHook(function(){this.options.attributionControl&&(this.attributionControl=(new o.Control.Attribution).addTo(this))}),o.control.attribution=function(t){return new o.Control.Attribution(t)},o.Control.Scale=o.Control.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0,updateWhenIdle:!1},onAdd:function(t){this._map=t;var e="leaflet-control-scale",i=o.DomUtil.create("div",e),n=this.options;return this._addScales(n,e,i),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),i},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,i){t.metric&&(this._mScale=o.DomUtil.create("div",e+"-line",i)),t.imperial&&(this._iScale=o.DomUtil.create("div",e+"-line",i))},_update:function(){var t=this._map.getBounds(),e=t.getCenter().lat,i=6378137*Math.PI*Math.cos(e*Math.PI/180),n=i*(t.getNorthEast().lng-t.getSouthWest().lng)/180,o=this._map.getSize(),s=this.options,a=0;o.x>0&&(a=n*(s.maxWidth/o.x)),this._updateScales(s,a)},_updateScales:function(t,e){t.metric&&e&&this._updateMetric(e),t.imperial&&e&&this._updateImperial(e)},_updateMetric:function(t){var e=this._getRoundNum(t);this._mScale.style.width=this._getScaleWidth(e/t)+"px",this._mScale.innerHTML=1e3>e?e+" m":e/1e3+" km"},_updateImperial:function(t){var e,i,n,o=3.2808399*t,s=this._iScale;o>5280?(e=o/5280,i=this._getRoundNum(e),s.style.width=this._getScaleWidth(i/e)+"px",s.innerHTML=i+" mi"):(n=this._getRoundNum(o),s.style.width=this._getScaleWidth(n/o)+"px",s.innerHTML=n+" ft")},_getScaleWidth:function(t){return Math.round(this.options.maxWidth*t)-10},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),i=t/e;return i=i>=10?10:i>=5?5:i>=3?3:i>=2?2:1,e*i}}),o.control.scale=function(t){return new o.Control.Scale(t)},o.Control.Layers=o.Control.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0},initialize:function(t,e,i){o.setOptions(this,i),this._layers={},this._lastZIndex=0,this._handlingClick=!1;for(var n in t)this._addLayer(t[n],n);for(n in e)this._addLayer(e[n],n,!0)},onAdd:function(t){return this._initLayout(),this._update(),t.on("layeradd",this._onLayerChange,this).on("layerremove",this._onLayerChange,this),this._container},onRemove:function(t){t.off("layeradd",this._onLayerChange,this).off("layerremove",this._onLayerChange,this)},addBaseLayer:function(t,e){return this._addLayer(t,e),this._update(),this},addOverlay:function(t,e){return this._addLayer(t,e,!0),this._update(),this},removeLayer:function(t){var e=o.stamp(t);return delete this._layers[e],this._update(),this},_initLayout:function(){var t="leaflet-control-layers",e=this._container=o.DomUtil.create("div",t);e.setAttribute("aria-haspopup",!0),o.Browser.touch?o.DomEvent.on(e,"click",o.DomEvent.stopPropagation):o.DomEvent.disableClickPropagation(e).disableScrollPropagation(e);var i=this._form=o.DomUtil.create("form",t+"-list");if(this.options.collapsed){o.Browser.android||o.DomEvent.on(e,"mouseover",this._expand,this).on(e,"mouseout",this._collapse,this);var n=this._layersLink=o.DomUtil.create("a",t+"-toggle",e);n.href="#",n.title="Layers",o.Browser.touch?o.DomEvent.on(n,"click",o.DomEvent.stop).on(n,"click",this._expand,this):o.DomEvent.on(n,"focus",this._expand,this),o.DomEvent.on(i,"click",function(){setTimeout(o.bind(this._onInputClick,this),0)},this),this._map.on("click",this._collapse,this)}else this._expand();this._baseLayersList=o.DomUtil.create("div",t+"-base",i),this._separator=o.DomUtil.create("div",t+"-separator",i),this._overlaysList=o.DomUtil.create("div",t+"-overlays",i),e.appendChild(i)},_addLayer:function(t,e,i){var n=o.stamp(t);this._layers[n]={layer:t,name:e,overlay:i},this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex))},_update:function(){if(this._container){this._baseLayersList.innerHTML="",this._overlaysList.innerHTML="";var t,e,i=!1,n=!1;for(t in this._layers)e=this._layers[t],this._addItem(e),n=n||e.overlay,i=i||!e.overlay;this._separator.style.display=n&&i?"":"none"}},_onLayerChange:function(t){var e=this._layers[o.stamp(t.layer)];if(e){this._handlingClick||this._update();var i=e.overlay?"layeradd"===t.type?"overlayadd":"overlayremove":"layeradd"===t.type?"baselayerchange":null;i&&this._map.fire(i,e)}},_createRadioElement:function(t,i){var n='<input type="radio" class="leaflet-control-layers-selector" name="'+t+'"';i&&(n+=' checked="checked"'),n+="/>";var o=e.createElement("div");return o.innerHTML=n,o.firstChild},_addItem:function(t){var i,n=e.createElement("label"),s=this._map.hasLayer(t.layer);t.overlay?(i=e.createElement("input"),i.type="checkbox",i.className="leaflet-control-layers-selector",i.defaultChecked=s):i=this._createRadioElement("leaflet-base-layers",s),i.layerId=o.stamp(t.layer),o.DomEvent.on(i,"click",this._onInputClick,this);var a=e.createElement("span");a.innerHTML=" "+t.name,n.appendChild(i),n.appendChild(a);var r=t.overlay?this._overlaysList:this._baseLayersList;return r.appendChild(n),n},_onInputClick:function(){var t,e,i,n=this._form.getElementsByTagName("input"),o=n.length;for(this._handlingClick=!0,t=0;o>t;t++)e=n[t],i=this._layers[e.layerId],e.checked&&!this._map.hasLayer(i.layer)?this._map.addLayer(i.layer):!e.checked&&this._map.hasLayer(i.layer)&&this._map.removeLayer(i.layer);this._handlingClick=!1,this._refocusOnMap()},_expand:function(){o.DomUtil.addClass(this._container,"leaflet-control-layers-expanded")},_collapse:function(){this._container.className=this._container.className.replace(" leaflet-control-layers-expanded","")}}),o.control.layers=function(t,e,i){return new o.Control.Layers(t,e,i)},o.PosAnimation=o.Class.extend({includes:o.Mixin.Events,run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._newPos=e,this.fire("start"),t.style[o.DomUtil.TRANSITION]="all "+(i||.25)+"s cubic-bezier(0,0,"+(n||.5)+",1)",o.DomEvent.on(t,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),o.DomUtil.setPosition(t,e),o.Util.falseFn(t.offsetWidth),this._stepTimer=setInterval(o.bind(this._onStep,this),50)},stop:function(){this._inProgress&&(o.DomUtil.setPosition(this._el,this._getPos()),this._onTransitionEnd(),o.Util.falseFn(this._el.offsetWidth))},_onStep:function(){var t=this._getPos();return t?(this._el._leaflet_pos=t,void this.fire("step")):void this._onTransitionEnd()},_transformRe:/([-+]?(?:\d*\.)?\d+)\D*, ([-+]?(?:\d*\.)?\d+)\D*\)/,_getPos:function(){var e,i,n,s=this._el,a=t.getComputedStyle(s);if(o.Browser.any3d){if(n=a[o.DomUtil.TRANSFORM].match(this._transformRe),!n)return;e=parseFloat(n[1]),i=parseFloat(n[2])}else e=parseFloat(a.left),i=parseFloat(a.top);return new o.Point(e,i,!0)},_onTransitionEnd:function(){o.DomEvent.off(this._el,o.DomUtil.TRANSITION_END,this._onTransitionEnd,this),this._inProgress&&(this._inProgress=!1,this._el.style[o.DomUtil.TRANSITION]="",this._el._leaflet_pos=this._newPos,clearInterval(this._stepTimer),this.fire("step").fire("end"))}}),o.Map.include({setView:function(t,e,n){if(e=e===i?this._zoom:this._limitZoom(e),t=this._limitCenter(o.latLng(t),e,this.options.maxBounds),n=n||{},this._panAnim&&this._panAnim.stop(),this._loaded&&!n.reset&&n!==!0){n.animate!==i&&(n.zoom=o.extend({animate:n.animate},n.zoom),n.pan=o.extend({animate:n.animate},n.pan));var s=this._zoom!==e?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,e,n.zoom):this._tryAnimatedPan(t,n.pan);if(s)return clearTimeout(this._sizeTimer),this}return this._resetView(t,e),this},panBy:function(t,e){if(t=o.point(t).round(),e=e||{},!t.x&&!t.y)return this;if(this._panAnim||(this._panAnim=new o.PosAnimation,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),e.noMoveStart||this.fire("movestart"),e.animate!==!1){o.DomUtil.addClass(this._mapPane,"leaflet-pan-anim");var i=this._getMapPanePos().subtract(t);this._panAnim.run(this._mapPane,i,e.duration||.25,e.easeLinearity)}else this._rawPanBy(t),this.fire("move").fire("moveend");return this},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){o.DomUtil.removeClass(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var i=this._getCenterOffset(t)._floor();return(e&&e.animate)===!0||this.getSize().contains(i)?(this.panBy(i,e),!0):!1}}),o.PosAnimation=o.DomUtil.TRANSITION?o.PosAnimation:o.PosAnimation.extend({run:function(t,e,i,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=i||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=o.DomUtil.getPosition(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(),this._complete())},_animate:function(){this._animId=o.Util.requestAnimFrame(this._animate,this),this._step()},_step:function(){var t=+new Date-this._startTime,e=1e3*this._duration;e>t?this._runFrame(this._easeOut(t/e)):(this._runFrame(1),this._complete())},_runFrame:function(t){var e=this._startPos.add(this._offset.multiplyBy(t));o.DomUtil.setPosition(this._el,e),this.fire("step")},_complete:function(){o.Util.cancelAnimFrame(this._animId),this._inProgress=!1,this.fire("end")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),o.Map.mergeOptions({zoomAnimation:!0,zoomAnimationThreshold:4}),o.DomUtil.TRANSITION&&o.Map.addInitHook(function(){this._zoomAnimated=this.options.zoomAnimation&&o.DomUtil.TRANSITION&&o.Browser.any3d&&!o.Browser.android23&&!o.Browser.mobileOpera,this._zoomAnimated&&o.DomEvent.on(this._mapPane,o.DomUtil.TRANSITION_END,this._catchTransitionEnd,this)}),o.Map.include(o.DomUtil.TRANSITION?{_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,i){if(this._animatingZoom)return!0;if(i=i||{},!this._zoomAnimated||i.animate===!1||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(e),o=this._getCenterOffset(t)._divideBy(1-1/n),s=this._getCenterLayerPoint()._add(o);return i.animate===!0||this.getSize().contains(o)?(this.fire("movestart").fire("zoomstart"),this._animateZoom(t,e,s,n,null,!0),!0):!1},_animateZoom:function(t,e,i,n,s,a,r){r||(this._animatingZoom=!0),o.DomUtil.addClass(this._mapPane,"leaflet-zoom-anim"),this._animateToCenter=t,this._animateToZoom=e,o.Draggable&&(o.Draggable._disabled=!0),o.Util.requestAnimFrame(function(){this.fire("zoomanim",{center:t,zoom:e,origin:i,scale:n,delta:s,backwards:a})},this)},_onZoomTransitionEnd:function(){this._animatingZoom=!1,o.DomUtil.removeClass(this._mapPane,"leaflet-zoom-anim"),this._resetView(this._animateToCenter,this._animateToZoom,!0,!0),o.Draggable&&(o.Draggable._disabled=!1)}}:{}),o.TileLayer.include({_animateZoom:function(t){this._animating||(this._animating=!0,this._prepareBgBuffer());var e=this._bgBuffer,i=o.DomUtil.TRANSFORM,n=t.delta?o.DomUtil.getTranslateString(t.delta):e.style[i],s=o.DomUtil.getScaleString(t.scale,t.origin);e.style[i]=t.backwards?s+" "+n:n+" "+s},_endZoomAnim:function(){var t=this._tileContainer,e=this._bgBuffer;t.style.visibility="",t.parentNode.appendChild(t),o.Util.falseFn(e.offsetWidth),this._animating=!1},_clearBgBuffer:function(){var t=this._map;!t||t._animatingZoom||t.touchZoom._zooming||(this._bgBuffer.innerHTML="",this._bgBuffer.style[o.DomUtil.TRANSFORM]="")},_prepareBgBuffer:function(){var t=this._tileContainer,e=this._bgBuffer,i=this._getLoadedTilesPercentage(e),n=this._getLoadedTilesPercentage(t);return e&&i>.5&&.5>n?(t.style.visibility="hidden",void this._stopLoadingImages(t)):(e.style.visibility="hidden",e.style[o.DomUtil.TRANSFORM]="",this._tileContainer=e,e=this._bgBuffer=t,this._stopLoadingImages(e),void clearTimeout(this._clearBgBufferTimer))},_getLoadedTilesPercentage:function(t){var e,i,n=t.getElementsByTagName("img"),o=0;for(e=0,i=n.length;i>e;e++)n[e].complete&&o++;return o/i},_stopLoadingImages:function(t){var e,i,n,s=Array.prototype.slice.call(t.getElementsByTagName("img"));for(e=0,i=s.length;i>e;e++)n=s[e],n.complete||(n.onload=o.Util.falseFn,n.onerror=o.Util.falseFn,n.src=o.Util.emptyImageUrl,n.parentNode.removeChild(n))}}),o.Map.include({_defaultLocateOptions:{watch:!1,setView:!1,maxZoom:1/0,timeout:1e4,maximumAge:0,enableHighAccuracy:!1},locate:function(t){if(t=this._locateOptions=o.extend(this._defaultLocateOptions,t),!navigator.geolocation)return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=o.bind(this._handleGeolocationResponse,this),i=o.bind(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,i=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+i+"."})},_handleGeolocationResponse:function(t){var e=t.coords.latitude,i=t.coords.longitude,n=new o.LatLng(e,i),s=180*t.coords.accuracy/40075017,a=s/Math.cos(o.LatLng.DEG_TO_RAD*e),r=o.latLngBounds([e-s,i-a],[e+s,i+a]),h=this._locateOptions;if(h.setView){var l=Math.min(this.getBoundsZoom(r),h.maxZoom);this.setView(n,l)}var u={latlng:n,bounds:r,timestamp:t.timestamp};for(var c in t.coords)"number"==typeof t.coords[c]&&(u[c]=t.coords[c]);this.fire("locationfound",u)}})}(window,document);
\ No newline at end of file